此问题与Python: why print statements and subprocess.call() output are out of sync?有关,但解决方案不适用于我的特定情况。我正在尝试在python中完成一个自动化测试过程,该过程首先打印一个Test Suite的名称,然后有一个for循环,它遍历打印特定测试名称的列表,然后是一个子进程调用来执行测试,以打印声明结束,测试结束。最后,我打印一条声明说它是测试套件名称的结尾。
即。 ========= BEGIN TEST SUITE:=========
---------开始测试:----------
子进程调用执行测试
---------结束测试:------------
重复测试
========= END TEST SUITE:==========
我当前的代码工作正常但是当我将其输出重定向到文件时,它将所有打印语句放在底部。当在另一个问题中使用解决方案时,它完全相反,并首先打印所有打印语句,然后执行测试。我尝试过使用sys.stdout.flush(),以及关闭缓冲,但两者都给了我同样的东西。当我重定向输出或写入文件时,如何才能完全按照代码执行方式打印所有内容?
答案 0 :(得分: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.'
如果你发布一些代码,我可以告诉你如何更专门地为你的测试做这个