主なスクリプトがscript.py
あるを使用した場合、次のようにscript.py
を起動するとき、私は2つのサブプロセスを実行します。終了サブプロセスのxterm
#PART ONE:
import subprocess
command = ["python", "first.py"]
command2 = ["python", "second.py"]
n = 5
for i in range(n):
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p2 = subprocess.Popen(command2, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
#PART TWO:
while True: #or while p.returncode==None:
output = p.stdout.readline().strip()
print output
if output == 'stop':
print 'success'
p.terminate()
p2.terminate()
break
だから基本的に私は停止し、両方の時にサブプロセスp
版画「停止」しています。すべてが順調。私は別の端末で2つのサブプロセスを起動する点の違いで、command
とcommand2
にそれぞれ'xterm','-e'
を追加することで、同じことを動作させようとしています。問題は現在p.stdout.readline().strip()
です。p
の内容にアクセスできないので、メインスクリプトscript.py
からサブプロセスを停止することはできません。 command = ['xterm','-e','python','first.py']
を使用しても、出力を読み込み、「停止」が印刷されている場合は出力を終了できるように、コード(特に#2)を変更する必要がありますか?
そこで、基本的#PART ONEは今です:
#PART ONE:
import subprocess
command = ["xterm","-e","python", "first.py"]
command2 = ["xterm","-e","python", "second.py"]
n = 5
for i in range(n):
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p2 = subprocess.Popen(command2, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
質問は、出力を読み取ることができるように、#PART TWOを変更する方法で、プロセスは、いくつかの条件を指定した終了しました。
[XY問題](http://meta.stackexchange.com/a/66378/137096)のように見えます。コンテキストを説明するようにしてください。 'xterm'を実行する代わりに(例えば、tkinterを使って)GUIを作成することを検討してください。別のターミナルで実行されているプロセスの出力を読み込むには、[名前付きパイプを使う](http://stackoverflow.com/a/11724655/4279)があります。 '.terminate()'はプロセスツリー全体を終了させないかもしれません。[Shell = Trueで始まるpythonサブプロセスを終了する方法](http://stackoverflow.com/q/4789837) – jfs
@JFSebastian haha私はあなたが送られたリンクを読んでいます:しかし、私は明示的にshell = Trueをサブプロセスを使って呼んだことはありませんでした。大文字小文字の区別があるかどうか?(またはそのリンクで提案されているその他の方法) –
'Popen()'呼び出しが、より多くを生成する限り、コードに 'shell = True'がないことは重要ではありません私のコメントの主なフレーズは*「プロセスツリー全体を殺す」*です。用語を理解するには:[プロセスグループ、セッションはこれを読んでください](https://www.win.tue.nl/~aeb/linux /lk/lk-10.html) – jfs