Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menangkap isyarat penamatan Ctrl+C dalam Python3
Aturcara Python yang berjalan lama, seperti bahagian belakang pelayan atau program pengkomputeran saintifik, memerlukan perhatian khusus. Apabila melakukan operasi tertentu, seperti menggunakan Ctrl+C untuk menamatkan program yang sedang berjalan, kita mungkin perlu menamatkannya lebih awal. Biasanya, terdapat dua kemungkinan untuk situasi ini: satu ialah program mempunyai ralat dan program perlu dihentikan untuk pelarasan. Yang lain ialah program itu sendiri adalah betul, tetapi program berjalan terlalu perlahan, atau ia mungkin mahu ditamatkan lebih awal Dalam senario ini, kami sering berharap untuk mengekalkan hasil pengiraan yang sepadan. Walau bagaimanapun, jika kami menggunakan beberapa format storan data pihak ketiga untuk menyimpan data, ia mungkin tidak menyokong storan berterusan Ia adalah perkara biasa untuk menyimpan keputusan selepas pelaksanaan program selesai. Jika program ditamatkan pada pertengahan jalan, cara khas diperlukan untuk menyimpan keputusannya.
Mula-mula kita lihat kes yang agak mudah: program biasa yang mencetak nombor, yang mencetak nombor setiap 1 saat Kita boleh menggunakan isyarat ular sawa untuk menangkap isyarat penamatan ini .
# signal_exit.py import signal import sys def signal_handler(signal, frame): print ('\nSignal Catched! You have just type Ctrl+C!') sys.exit(0) if __name__ == '__main__': import time signal.signal(signal.SIGINT, signal_handler) for x in range(100): time.sleep(1) print (x)
Apabila kita separuh jalan menjalankan program ini dan tekan Ctrl+C pada masa yang sama, kita akan mendapat keputusan berikut:
$ python3 signal_exit.py
0
1
2
^C
Isyarat Ditangkap! Anda baru sahaja menaip Ctrl+C!
Hasil ini menunjukkan bahawa kami menangkap Ctrl+C semasa menjalankan program Operasi luaran ini dilakukan dan operasi diproses dengan sewajarnya sebelum program ditamatkan. Perlu diingatkan bahawa jika operasi penamatan sys.exit(0) tidak ditambahkan pada masa ini, program tidak akan dihentikan dan akan terus berjalan, yang bersamaan dengan menangkap isyarat penamatan yang tidak normal tetapi tidak melakukan sebarang pemprosesan.
Dalam kes di atas, kami hanya menangkap isyarat luaran "menamatkan larian", tetapi jika kami pergi lebih jauh, kami mahu menangkapnya ke tamat Apakah nombor output, dan bagaimana untuk mengendalikannya pada masa ini? Fungsi signal.signal itu sendiri tidak menyokong lulus banyak parameter Pada masa ini, adalah disyorkan untuk membuat kelas sendiri dan merangkum fungsi signal_handler sebagai fungsi ahli kelas, supaya kita boleh mendapatkan parameter dalaman yang sepadan. , seperti kes berikut Seperti yang ditunjukkan:
# signal_exit.py import signal import sys import time class Printer: def __init__(self): self.x = 0 signal.signal(signal.SIGINT, self.signal_handler) def signal_handler(self, signal, frame): print ('\nSignal Catched! You have just type Ctrl+C! The last number is: {}'.format(self.x)) sys.exit(0) def run(self, counter=10): while self.x < counter: print (self.x) time.sleep(1) self.x += 1 if __name__ == '__main__': printer = Printer() printer.run(counter=100)
Pada masa ini, jika anda menekan Ctrl+C pada masa yang sama semasa program sedang berjalan, hasilnya akan seperti berikut:
Seperti yang anda lihat, Kami berjaya menangkap parameter keluaran terakhir.$ python3 signal_exit.py
0
1
2
3
^C
Isyarat Ditangkap! >
Atas ialah kandungan terperinci Bagaimana untuk menangkap isyarat penamatan Ctrl+C dalam Python3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!