3

假设我有一个打印出一些数据的过程,比如这个 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在最后一点打印出所有缓冲数据。

有没有办法在不缓冲的情况下打印出生成进程的输出?

4

1 回答 1

5

数据正在由 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()
于 2010-02-20T23:03:25.663 回答