2011-08-09 13 views
6

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)

+0

Xem http://stackoverflow.com/questions/4205317/capture-keyboardinterrupt-in-python-without-try-except cho một số tùy chọn. – DSM

Trả lời

18

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() 
+0

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

+0

@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

+1

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

5

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.