2

subprocess を使用して Linux で xterm を実行し、それが他のプロセスを実行する場合、Python (2.6.5) はプロセス (xterm) の実行が完了したことを決して認識しないようです。

次のコードを検討してください。

import subprocess
import shlex
import time

proc = subprocess.Popen(shlex.split('xterm -iconic -title "FOO_BAR" -e sleep 5'))
while True:
    if proc.poll():
        print 'Process completed'
    time.sleep(0.1)

これは、Python インタープリターを終了するまで無限にループします。これはおそらく xterm の奇妙なことが原因であり、Python サブプロセス モジュールの直接の原因ではないと推測していますが、状況に光を当てることができる他の賢明な人々がそこにいる可能性があります。

注:proc.communicate()実際には xterm が完了すると呼び出しが返されますが、何らかの理由で poll メソッドが機能しません。

4

1 に答える 1

3

このプログラムは、リターン(プロセスがまだ実行中であることを意味する) とproc.poll()リターン(プロセスがゼロの終了値で終了したことを意味し、通常は正常終了を示します) を区別しません。この行を変更します。Noneproc.poll()0

if proc.poll():

これに:

if proc.poll() is not None:

そして、それが役立つかどうかを確認してください。

于 2012-06-12T16:37:27.083 に答える