У меня есть команда, которую я обертываю в script
и нерест из Python script с помощью subprocess.Popen
. Я пытаюсь убедиться, что он умирает, если пользователь выдает SIGINT
.
Я мог бы выяснить, был ли процесс прерван хотя бы двумя способами:
а. Умрите, если обернутая команда имеет ненулевой статус выхода (не работает, поскольку script
, кажется, всегда возвращает 0)
В. Сделайте что-то особенное с SIGINT
в родительском Python script, а не просто прерывая подпроцесс. Я пробовал следующее:
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 script. Вместо этого происходит подпроцесс, а script продолжается.