1

这个问题与Python 有关:为什么 print 语句和 subprocess.call() 输出不同步?但解决方案不适用于我的特殊情况。我正在尝试在 python 中完成一个自动化测试过程,它首先打印测试套件的名称,然后有一个 for 循环,该循环遍历打印特定测试名称的列表,然后是执行测试的子进程调用,以测试完成的打印语句结束。最后,我打印了一条语句,说明它是测试套件名称的结尾。

即=========开始测试套件:=========

---------开始测试: ----------

子进程调用执行测试

---------结束测试:------------

重复测试

=========结束测试套件:==========

我当前的代码工作正常,但是当我将其输出重定向到文件时,它会将所有打印语句放在底部。在另一个问题中使用解决方案时,它对我来说完全相反,首先打印所有打印语句,然后执行测试。我尝试使用 sys.stdout.flush(),以及关闭缓冲,但两者都给了我同样的东西。当我重定向输出或写入文件时,如何才能完全按照代码执行/在代码中的方式打印所有内容?

4

1 回答 1

1

我通常解决此类问题的方法是捕获 python 程序中的输出并在我希望它使用打印时打印它Popen

>>> def do_ls():
...     print "I'm about to ls"
...     ls = subprocess.Popen('ls', stdout=subprocess.PIPE)
...     output = ls.communicate()[0] #wait for the process to finish, capture stdout
...     print 'ls output:'
...     print output
...     print 'done.'

如果您发布一些代码,我可以向您展示如何更具体地为您的测试执行此操作

于 2012-08-09T22:25:26.203 回答