Я использую python для управления некоторыми симуляциями. Я создаю параметры и запускаю программу, используя:
pipe = open('/dev/null', 'w')
pid = subprocess.Popen(shlex.split(command), stdout=pipe, stderr=pipe)
Мой код обрабатывает другой сигнал. Ctrl+C остановит симуляцию, спросит, хочу ли я сохранить, и изящно выйду. У меня есть другие обработчики сигналов (например, для принудительного вывода данных).
Я хочу отправить сигнал (SIGINT, Ctrl+C) моему скрипту Python, который спросит пользователя, какой сигнал он хочет отправить программе.
Единственное, что мешает коду работать, это то, что кажется, что что бы я ни делал, Ctrl+C будет "перенаправлено" в подпроцесс: код поймает его и выйдет:
try:
<wait for available slots>
except KeyboardInterrupt:
print "KeyboardInterrupt catched! All simulations are paused. Please choose the signal to send:"
print " 0: SIGCONT (Continue simulation)"
print " 1: SIGINT (Exit and save)"
[...]
answer = raw_input()
pid.send_signal(signal.SIGCONT)
if (answer == "0"):
print " --> Continuing simulation..."
elif (answer == "1"):
print " --> Exit and save."
pid.send_signal(signal.SIGINT)
[...]
Итак, что бы я ни делал, программа получает SIGINT, который я хочу видеть только в моем скрипте Python. Как мне это сделать???
Я также пробовал:
signal.signal(signal.SIGINT, signal.SIG_IGN)
pid = subprocess.Popen(shlex.split(command), stdout=pipe, stderr=pipe)
signal.signal(signal.SIGINT, signal.SIG_DFL)
запустить программу, но это дает тот же результат: программа ловит SIGINT.
Спасибо!