Распечатайте выходные данные ОС.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 распечатывает все буферизованные данные в последней точке.
Есть ли способ распечатать выходные данные порожденного процесса без буферизации?
1 ответ:
Данные буферизуются 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()