3

さて、私は2つのスクリプトを持っています。次のように b.py スクリプトの出力を出力する a.py:

#a.py
from subprocess import Popen, PIPE, STDOUT

p = Popen(['/Users/damian/Desktop/b.py'], shell=False, stdout=PIPE, stderr=STDOUT)

while p.poll() is None:
    print p.stdout.readline()


#b.py
#!/usr/bin/env python
import time

while 1:
    print 'some output'
    #time.sleep(1)

これは機能しますが、time.sleep() 行のコメントを外すとスクリプトがデッドロックするのはなぜですか?

4

2 に答える 2

5

出力はおそらくバッファリングされています。stdout に.flush()を追加してクリアします。

import sys
import time

while 1:
    print 'someoutput'
    sys.stdout.flush()
    time.sleep(1)
于 2012-10-01T19:37:45.050 に答える
2

-u呼び出しに追加する場合(出力をバッファリングしないようにする)、スクリプトa.pyを変更する必要はありません。b.py

import sys
from subprocess import Popen, PIPE, STDOUT

p = Popen([sys.executable, '-u', '/Users/damian/Desktop/b.py'],
          stdout=PIPE, stderr=STDOUT, close_fds=True)
for line in iter(p.stdout.readline, ''):
    print line,
p.stdout.close()
if p.wait() != 0:
   raise RuntimeError("%r failed, exit status: %d" % (cmd, p.returncode))

subprocess から出力を取得するその他の方法を参照してください。

于 2012-10-01T20:38:56.350 に答える