0
私はこのように開くp.terminate
と私のサブプロセス終了:あなたは私はテキストファイルにすべてのエラーをリダイレクト見ることができるように)(p.terminateで終了したプロセスにSIGTERM上のファイルをログ書く
p = Popen([sys.executable, args], stdin=PIPE, stdout=PIPE, stderr=open("error.txt", 'a'))
を私はいつも読むことができます。 私はサブプロセスが終了しますと、このファイルに何かを印刷するには、この機能をmissused:
signal.signal(signal.SIGTERM, sigterm_handler) # sets shutdown_flag
while True:
if shutdown_flag:
print("Some Useful information", file=sys.stderr)
しかし:ファイルは常に空です。これは、terminate
が呼び出されたときにパイプが閉じられ、この時点でサブプロセスから書き込まれたものが失われるためですか?それとも私はここで見ていない他の問題はありますか?
すると、私は、スレッドが、サブプロセスを使用していません。同じように動作しますか? – Fuzzyma
私の悪い。私は脳に糸を持っていた。 あなたができることは似ています。つまり、プロセスを終了させるのではなく、終了するように指示します。 p.terminate()の代わりにp.communicate(「シャットダウンしてください」)をお勧めします その後、元のスニペットでイベントを待つのではなく、stdinのデータを "please shut down"(またはあなたが望むどんな文字列でも)。 また、重要なことに、p.communicate()の後にp.wait()を実行します。 – Martin
私はプロセスにデータをパイプするので、私の場合は簡単に行えません。ソリューションを設定すると、データフローと制御フローが混在し、分離しておく必要があります – Fuzzyma