print语句仅出现在子进程调用之前或之后

时间:2012-08-09 21:40:37

标签: python file-io subprocess output-buffering

此问题与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(),以及关闭缓冲,但两者都给了我同样的东西。当我重定向输出或写入文件时,如何才能完全按照代码执行方式打印所有内容?

1 个答案:

答案 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.'

如果你发布一些代码,我可以告诉你如何更专门地为你的测试做这个