打印出os.popen()的输出而不在python中进行缓冲

假设我有一个进程打印出一些类似于这个ruby代码的数据。

1.upto(10) { |i| puts i puts "\n" sleep 0.6 } 

我想要一个生成此过程的python代码,并从中读取数据以将其打印出来。

 import os import sys cmd = "ruby /Users/smcho/Desktop/testit.rb"; pingaling = os.popen(cmd,"r") while 1: line = pingaling.readline() if not line: break print line, sys.stdout.flush() pingaling.close() 

这段代码的问题在于它不会逐个打印数字。 似乎python在最后一点打印出所有缓冲的数据。

有没有办法打印出没有缓冲的衍生过程的输出?

ruby正在缓冲数据。 使用类似的东西

 $stdout.flush 

让它齐平。 我不确定这是否是正确的ruby命令。


强制性:

使用subprocess模块。 os.popen 已被它取代 。

 import subprocess import sys cmd = ["ruby", "/Users/smcho/Desktop/testit.rb"] p = subprocess.Popen(cmd, stdout=subprocess.PIPE) for line in iter(p.stdout.readline, ''): print line, sys.stdout.flush() p.wait() 
Interesting Posts