3

このルビコードのようなデータを出力するプロセスがあるとしましょう。

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() 

このコードの問題は、番号を 1 つずつ出力しないことです。python は最後の時点でバッファリングされたすべてのデータを出力するようです。

バッファリングせずに生成されたプロセスの出力を出力する方法はありますか?

4

1 に答える 1

5

データは ruby​​ によってバッファリングされています。次のようなものを使用します

$stdout.flush

それをフラッシュするために。それが正しいルビーコマンドかどうかはわかりません。


必須:

モジュールを使用し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 に答える