CtrlDविंडोज और लिनक्स के लिए + अंतर
ऐसा लगता है कि अजगर 3.6, अजगर के रूप में हैंडल दुभाषिया Ctrl+ Cअलग ढंग से लिनक्स और विंडोज के लिए। लिनक्स के लिए, Ctrl+ विंडोज पर ज्यादातर उम्मीद के Cमुताबिक काम करेगा + ज्यादातर काम नहीं करता है, खासकर अगर पायथन अवरुद्ध कॉल को चला रहा है जैसे कि या वेब प्रतिक्रिया पर प्रतीक्षा कर रहा है। हालांकि, यह काम करता है । यहाँ पायथन दुभाषिया में क्या चल रहा है की अच्छी व्याख्या है। ध्यान दें कि + उत्पन्न करता है ।CtrlC thread.jointime.sleepCtrlCSIGINT
समाधान 1: उपयोग Ctrl+ Breakया समतुल्य
टर्मिनल / कंसोल विंडो में कीबोर्ड शॉर्टकट का उपयोग करें जो SIGBREAKओएस में निचले स्तर पर उत्पन्न होगा और पायथन इंटरप्रिटर को समाप्त करेगा।
मैक ओएस और लिनक्स
Ctrl+ Shift+ \या Ctrl+\
विंडोज :
- सामान्य: Ctrl+Break
- डेल: Ctrl+ Fn+ F6या Ctrl+ Fn+S
- लेनोवो: Ctrl+ Fn+ F11या Ctrl+ Fn+B
- एचपी: Ctrl+ Fn+Shift
- सैमसंग: Fn+Esc
समाधान 2: Windows API का उपयोग करें
नीचे आसान कार्य हैं जो विंडोज का पता लगाएंगे और कंसोल में Ctrl+ के लिए कस्टम हैंडलर स्थापित करेंगे C:
#win_ctrl_c.py
import sys
def handler(a,b=None):
sys.exit(1)
def install_handler():
if sys.platform == "win32":
import win32api
win32api.SetConsoleCtrlHandler(handler, True)
आप इस तरह से ऊपर का उपयोग कर सकते हैं:
import threading
import time
import win_ctrl_c
# do something that will block
def work():
time.sleep(10000)
t = threading.Thread(target=work)
t.daemon = True
t.start()
#install handler
install_handler()
# now block
t.join()
#Ctrl+C works now!
समाधान 3: मतदान विधि
मैं इस पद्धति को पसंद नहीं करता या इसकी सिफारिश नहीं करता क्योंकि यह अनावश्यक रूप से प्रोसेसर और पावर को नकारात्मक रूप से प्रभावित करता है और प्रदर्शन को प्रभावित करता है।
आयात सूत्रण आयात समय
def work():
time.sleep(10000)
t = threading.Thread(target=work)
t.daemon = True
t.start()
while(True):
t.join(0.1) #100ms ~ typical human response
# you will get KeyboardIntrupt exception