Я использую 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.
Thanx!