Capture将输出表现为动态创建的日志文件

时间:2015-07-28 15:14:31

标签: python python-3.x python-behave

我正在尝试捕获文件中的Behave输出(让我们说一个日志文件)。我正在' @然后'动态创建一个新的日志文件。每次运行基于日期时间的Behave步骤。下面是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 个答案:

答案 0 :(得分:0)

也许是这样的,其中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(