script
を使用してPythonスクリプトからラップして生成するコマンドがありsubprocess.Popen
ます。ユーザーがを発行した場合に確実に停止するようにしていますSIGINT
。
プロセスが少なくとも2つの方法で中断されたかどうかを把握できました。
A.ラップされたコマンドの終了ステータスがゼロ以外の場合は終了します(script
常に0を返すように見えるため、機能しません)
SIGINT
B.サブプロセスを単に中断するのではなく、親Pythonスクリプトで何か特別なことをします。私は次のことを試しました:
import sys
import signal
import subprocess
def interrupt_handler(signum, frame):
print "While there is a 'script' subprocess alive, this handler won't executes"
sys.exit(1)
signal.signal(signal.SIGINT, interrupt_handler)
for n in range( 10 ):
print "Going to sleep for 2 second...Ctrl-C to exit the sleep cycles"
# exit 1 if we make it to the end of our sleep
cmd = [ 'script', '-q', '-c', "sleep 2 && (exit 1)", '/dev/null']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
if p.poll() != None :
break
else :
pass
# Exiting on non-zero exit status would suffice
print "Exit status (script always exits zero, despite what happened to the wrapped command):", p.returncode
Ctrl-Cを押してPythonスクリプトを終了したいのですが。代わりに起こっているのは、サブプロセスが停止し、スクリプトが続行することです。