Python - обрабатывать CTRL+D с помощью "сигнала импорта"
В настоящее время я могу обрабатывать CTRL+C через:
def hand_inter(signum, frame):
print 'hey, nice job.'
signal.signal(signal.SIGINT, hand_inter)
Однако я также должен обрабатывать CTRL+D, но не могу найти соответствующий вызов signal.CTRL+D для signum.
1 ответ
Ctrl+D - это не сигнал, это конец файла.
Если у вас есть интерактивная программа, вы, скорее всего, будете читать STDIN, а Ctrl+D - это способ, которым пользователь говорит, что ввод окончен. Вне этого контекста оно не имеет особого значения.
Код, который выполняется после этого, обычно является кодом после readline или аналогичного вызова. Это эквивалентно чтению любого другого файла и обнаружению, что он закончился, и нет больше данных для чтения - соответствующий вызов даст вам указание на это.
Например, это может быть простая интерактивная программа:
import sys
while True:
line = sys.stdin.readline() # readline will return "" on EOF
if line:
do_something_with(line) # * if user just pressed Enter line will
# be "\n", i.e. still True
else: # * user pressed C-D, i.e. stdin has been
sys.exit(0) # closed readline call must have returned ""
С другой стороны, Ctrl+C отличается, это способ, которым пользователь говорит своему терминалу прекратить запущенный процесс. Это может произойти в любой момент, независимо от того, запрашивает ли процесс когда-либо вклад или даже заботится о внешнем мире.
Поскольку процесс не может ожидать этого вам нужно signal
чтобы установить так называемые ловушки, механизм, предоставляемый ОС для включения процессов, которые говорят: "если вы когда-нибудь захотите прекратить меня, просто выполните это вместо этого..." (что может быть чем угодно, в том числе ничего, т.е. просто игнорированием сигнал). Исключением являются специальные сигналы, такие как SIGKILL, которые не могут быть обнаружены процессом.