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

pro*_*eek 3 ruby python flush popen

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

1.upto(10) { 
  |i| 
  puts i 
  puts "\n" 
  sleep 0.6 
} 
Run Code Online (Sandbox Code Playgroud)

我想要一个生成此过程的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() 
Run Code Online (Sandbox Code Playgroud)

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

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

nos*_*klo 5

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

$stdout.flush
Run Code Online (Sandbox Code Playgroud)

让它齐平.我不确定这是否是正确的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()
Run Code Online (Sandbox Code Playgroud)