Захватывать выходные данные в динамически создаваемый файл журнала

Я пытаюсь записать результаты Behave в файл (скажем, файл журнала). Я динамически создаю новый файл журнала на шаге @then для каждого запуска Behave, основанного на datetime. Ниже приведен пример кода, приведенный в файле steps/xx.py.

def filecreation(filename):
    chwd=os.chdir('C:\\Users\\xxx\\Desktop\\features\\test_features')
    with open(filename, 'w+') as d:
        pass

cur_ts = datetime.datetime.now()
log_time_stamp = str(cur_ts).split('.')[0].replace(' ',':').replace('-',':').replace(':','')
file_name = 'ATMorFrameRelay' + log_time_stamp + '.log'
filecreation(file_name)
pass

Теперь я пытаюсь отправлять вывод Behave при каждом запуске в файл журнала, созданный выше. Я знаю, что команда "Behave -o [имя файла]" будет создавать файл для каждого запуска, но мысль скорее отправит STDOUT в созданный выше файл для каждого нового запуска. Также можно / безопасно использовать STDOUT для записи в файлы в рабочей среде, подобной среде, и не вызывать каких-либо проблем.

Я новичок в Python и Behave, поэтому с нетерпением жду каких-либо решений / предложений о том, как его можно достичь. Любые соответствующие материалы или информация будут по достоинству оценены.

заранее спасибо

1 ответ

Решение

Может как то так, где cmd на самом деле ведет себя команда для запуска тестов.

cmd = [
    'behave',
    '--no-capture',
    '--no-capture-stderr',
    '--format', 'progress2',
    '--logging-level', 'INFO',
    '--no-source', '--no-skipped', '--no-summary',
    '--tags', 'MACRO'
    ]
with io.open(filename, 'a') as writer, io.open(filename, 'rb', 1) as reader:
   process = subprocess.Popen(cmd, env=env, stdout=writer,stderr=writer)
   while process.poll() is None:
        sys.stdout.write(reader.read())
        sys.stdout.flush()
        time.sleep(0.1)
   sys.stdout.write(reader.read())
   sys.stdout.flush(
Другие вопросы по тегам