您的解释器正在缓冲。在打印语句后,添加对sys.stdout.flush()的调用。
解决方法我试图stdout从subprocess.Popen通话中抢夺,尽管我可以通过以下方式轻松实现此目标:
cmd = subprocess.Popen(’ls -l’,shell=True,stdout=PIPE)for line in cmd.stdout.readlines(): print line
我想stdout“实时”抓取。使用上述方法,PIPE等待获取所有内容stdout,然后返回。
因此,出于日志记录目的,这不符合我的要求(例如,“查看”发生的情况)。
stdout在运行时,有没有办法逐行获取?或者这是subprocess(必须等到PIPE关闭)的限制。
编辑 如果我切换readlines()为readline()我只得到stdout(不理想)的最后一行:
In [75]: cmd = Popen(’ls -l’,stdout=PIPE)In [76]: for i in cmd.stdout.readline(): print i....: total104