программа выполняется несколько раз, но не обновляет файл журнала должным образом - PullRequest
0 голосов
/ 24 августа 2018

У меня небольшие проблемы с файлом журнала для этого сценария.Когда я запускаю свой скрипт, первый файл журнала заполняется правильно.Без вопросов.Этот скрипт в значительной степени работает непрерывно, так как он использует 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-папка с содержимым теста ии файл журнала.Этот файл журнала всегда совпадает с первым тестом, даже если он должен быть другим.Кто-нибудь видит какие-либо проблемы с тем, как мой скрипт инициализирует файл конфигурации или что-то в этом роде?Я полагаю, что это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...