У меня небольшие проблемы с файлом журнала для этого сценария.Когда я запускаю свой скрипт, первый файл журнала заполняется правильно.Без вопросов.Этот скрипт в значительной степени работает непрерывно, так как он использует rabbitmq и действует как потребитель.(он извлекает сообщение из очереди, запускает, а затем ожидает повторения). Проблема заключается в том, что когда сценарий запускается второй, третий и т. д., файл журнала совпадает с первым тестом, даже если он должен быть другим.
Подводя итог, я запускаю несколько тестов и использую rabbitmq для распространения правильных тестов среди нужных потребителей.Потребитель (компьютер, на котором установлен этот скрипт) запускается каждый раз, когда получает сообщение.Основная цель кода - запустить инструмент (например, nmap), а затем упаковать результаты.Я предполагаю, что проблема, вероятно, связана с тем, как я настроил свой регистратор, так что для тех, кто читает, не слишком увлекайтесь тем, что делает инструмент.Возможно, проблема связана с журналом или shutil.copy, но я не уверен, что с ним не так.Вот упрощенный код.
import os
import subprocess
from ast import literal_eval
from datetime import datetime
import logging
import logging.config
import shutil
import zipfile
import yaml
TOOL = 'nmap'
LOGGER_NAME = 'nmap-Run'
logger = None
class Tool(object):
''' class for test execution'''
def __init__(self):
ToolDefault.__init__(self, tool=TOOL)
def _execute_tool(self):
''' Execute test based on associated yaml'''
logging.config.fileConfig('C:\\Users\\cschu\\Documents\\Sec\\src\\config\\test_log.conf')
global logger
logger = logging.getLogger(LOGGER_NAME)
logger.info('Retrieving options')
options = literal_eval(self.options)
split_string = ['some', 'command', 'here']
try:
cmd_line_process = subprocess.Popen(split_string,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
process_output, process_error = cmd_line_process.communicate()
logger.info(process_output)
except (OSError, subprocess.CalledProcessError) as e:
logger.info('An exception occurred: ', str(e))
logger.info('Test failed')
else:
logger.info('Test has concluded')
def _package_report(self):
''' Find latest test results and zip into local directory folder results.zip
'''
logger.info('Finding most recent test results')
# do some work in a directory here looking for latest file with strftime
upload_path = r"C:\test\resultFolder"
logger.debug('Most recent test result is ' + upload_path)
try:
shutil.copy(r'C:\Users\cschu\Documents\Sec\src\Logg.log', upload_path)
except IOError as e:
pass
# do work to zip upload_path which has Logg.log copied to it
# zip folder is called results.zip in local dir
return r'C:\Users\cschu\Documents\Sec\src\results.zip'
def main():
'''
Do some work with rabbitmq and run the test based off rabbitmq message.
'''
tool_object = Tool()
rabbit_connection = RabbitConnection(tool_object)
rabbit_connection.start()
if __name__ == '__main__':
main()
А вот мой файл test_log.conf.
[loggers]
keys=root
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=(os.getenv('LOG_FILE_PATH'), 'w')
# LOG_FILE_PATH is 'C:\Users\cschu\Documents\Sec\src\Logg.log'
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
Итак, в значительной степени возвращается zip-папка с содержимым теста ии файл журнала.Этот файл журнала всегда совпадает с первым тестом, даже если он должен быть другим.Кто-нибудь видит какие-либо проблемы с тем, как мой скрипт инициализирует файл конфигурации или что-то в этом роде?Я полагаю, что это проблема.