Có anyway tôi có thể làm cho kịch bản của tôi thực hiện một trong các chức năng của tôi khi Ctrl+c
bị nhấn khi tập lệnh đang chạy?Làm cách nào để ghi đè ngắt bàn phím? (Python)
Trả lời
Hãy xem signal handlers. CTRL-C tương ứng với SIGINT (tín hiệu số 2 trên hệ thống posix).
Ví dụ:
#!/usr/bin/env python
import signal
import sys
def signal_handler(signal, frame):
print 'You pressed Ctrl+C - or killed me with -2'
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
print 'Press Ctrl+C'
signal.pause()
lưu ý: điều này cũng nên nhấn xử lý tín hiệu khi bạn đi 'kill -2 [pid]' trong OS – wim
@wim, điểm tốt, cảm ơn, thêm một gợi ý cho câu trả lời của tôi - là có thực sự một cách để phân biệt một giết bằng bàn phím từ giết người bằng cách giết? – miku
Tôi đã nhìn thấy trước đây sẽ nâng cao một ngoại lệ 'KeyboardInterrupt' trong python, sau này sẽ không. Nhưng tôi không chắc chắn về các chi tiết thực hiện tại sao điều này là như vậy. – wim
Sử dụng KeyboardInterrupt exception và gọi chức năng của bạn trong khối except
.
Chắc chắn.
try:
# Your normal block of code
except KeyboardInterrupt:
# Your code which is executed when CTRL+C is pressed.
finally:
# Your code which is always executed.
Xem http://stackoverflow.com/questions/4205317/capture-keyboardinterrupt-in-python-without-try-except cho một số tùy chọn. – DSM