Как мне записать SIGINT в Python?

Как говорит unutbu, os.path.realpath (path) должен быть правильным ответом, возвращая канонический путь указанного имени файла, разрешая любые символические ссылки на их цели. Но он сломан под Windows.

Я создал патч для Python 3.2, чтобы исправить эту ошибку, и загрузил ее в:

http: //bugs.python. org / issue9949

Он исправляет функцию realpath в Python32 \ Lib\ntpath.py

Я также разместил ее на своем сервере здесь:

http://www.burtonsys.com/ntpath_fix_issue9949.zip

К сожалению, ошибка присутствует и в Python 2.x, и я ничего не знаю для него там.

486
задан Jonathon Reinhart 20 December 2014 в 20:08
поделиться

5 ответов

Зарегистрируйте свой обработчик с помощью signal.signal следующим образом:

#!/usr/bin/env python
import signal
import sys
def signal_handler(sig, frame):
        print('You pressed Ctrl+C!')
        sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C')
signal.pause()

Код адаптирован из здесь .

Дополнительную документацию по сигналу можно найти здесь .

729
ответ дан 22 November 2019 в 22:36
поделиться

Из документации Python :

import signal
import time

def handler(signum, frame):
    print 'Here you go'

signal.signal(signal.SIGINT, handler)

time.sleep(10) # Press Ctrl+c here
20
ответ дан 22 November 2019 в 22:36
поделиться

Вы можете рассматривать это как исключение (KeyboardInterrupt), как и любое другое. Создайте новый файл и запустите его из оболочки со следующим содержимым, чтобы понять, что я имею в виду:

import time, sys

x = 1
while True:
    try:
        print x
        time.sleep(.3)
        x += 1
    except KeyboardInterrupt:
        print "Bye"
        sys.exit()
163
ответ дан 22 November 2019 в 22:36
поделиться

Вы можете обработать CTRL + C , перехватив исключение KeyboardInterrupt . Вы можете реализовать любой код очистки в обработчике исключений.

27
ответ дан 22 November 2019 в 22:36
поделиться

Вы можете использовать функции во встроенном в Python сигнальном модуле ] для настройки обработчиков сигналов в python. В частности, функция signal.signal (signalnum, handler) используется для регистрации функции обработчика для сигнала signalnum .

4
ответ дан 22 November 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: