1

次のように、tempfile とサブプロセスを使用して Python で bash スクリプトを実行しています。

 with tempfile.NamedTemporaryFile() as scriptfile:
                scriptfile.write(teststr)
                scriptfile.flush()
                subprocess.call(['/bin/bash', scriptfile.name])

ここで、teststr には bash スクリプト全体が含まれています。Ctrl+c私の質問は、実行が開始されると、 や などのキーボード割り込みをキャプチャしないことctrl+zです。

スクリプトが開始されたら、スクリプトの実行を中断する方法はありますか?

4

1 に答える 1

1

問題は、Python の親プロセスが未処理の例外を受信SIGINTCtrl+Cて​​終了することですが、子プロセスはシグナルを無視して実行し続けることだと思います。それが私が再現できた唯一のシナリオです。実際の問題は異なる場合があります。例外をキャッチし、サブプロセスを明示的に強制終了するとSIGKILLうまくいく場合があります。

の代わりにsubprocess.call:

proc = subprocess.Popen(['/bin/bash', scriptfile.name])
try:
    proc.wait()
except:
    proc.kill()
    raise
于 2013-08-08T12:06:44.867 に答える