Trình xử lý Python Ctrl-C

Giới thiệu. Tìm hiểu cách nắm bắt và xử lý các tín hiệu hệ điều hành như SIGINT (CTRL-C) trong Python cho người mới bắt đầu

Trình xử lý Python Ctrl-C
Trình xử lý Python Ctrl-C
Bởi doanh nghiệp xanthium doanh nghiệp xanthium Theo dõi

Thêm bởi tác giả

Trình xử lý Python Ctrl-C
Trình xử lý Python Ctrl-C

Trình xử lý Python Ctrl-C
Trình xử lý Python Ctrl-C

Trình xử lý Python Ctrl-C
Trình xử lý Python Ctrl-C

Giới thiệu. https. //www. youtube. com/c/XanthiumIndustries/videos Thông tin thêm về các doanh nghiệp xanthium »

Sau đây, chúng ta sẽ tìm hiểu cách nắm bắt và xử lý các tín hiệu hệ điều hành như SIGINT và SIGBREAK trên Linux và HĐH Windows để kiểm soát luồng tập lệnh python của bạn trong quá trình thực thi

Chúng tôi sẽ sử dụng mô-đun tín hiệu từ Python 3 để nắm bắt và xử lý tín hiệu hệ điều hành

Thêm MẹoĐặt câu hỏiNhận xétTải xuống

Quân nhu

  • Trình thông dịch Python 3
  • soạn thảo văn bản

Thêm MẹoĐặt câu hỏiNhận xétTải xuống

Bước 1. nội dung


  • Có thể tìm thấy bài viết gốc về Hướng dẫn xử lý tín hiệu Python tại đây
  • Chúng tôi cũng có một video trên YouTube về Hướng dẫn xử lý tín hiệu Python


Thêm MẹoĐặt câu hỏiNhận xétTải xuống

Bước 2. mã nguồn

Trình xử lý Python Ctrl-C


Mã có thể hướng dẫn hiển thị ở đây có thể là một phần hoặc mã giả vừa đủ để làm nổi bật các kỹ thuật hoặc phương pháp có liên quan.  


Vui lòng sử dụng mã nguồn đầy đủ từ Github Repo của chúng tôi để tránh lỗi

  • Duyệt qua Xử lý tín hiệu hệ điều hành trong Python 3 Repo
  • Tải xuống Xử lý tín hiệu OS trong Python 3 Repo dưới dạng tệp zip


Thêm MẹoĐặt câu hỏiNhận xétTải xuống

Bước 3. Tín hiệu là gì

Trình xử lý Python Ctrl-C

Tín hiệu là cách mà một chương trình hoặc quy trình (ở đây là tập lệnh python của chúng tôi) có thể nhận thông tin từ Hệ điều hành rằng một số sự kiện nhất định như Nhấn bàn phím (CTRL + C ) hoặc Lỗi đã xảy ra.  


Tín hiệu được hệ điều hành gán Giá trị nguyên


Khi chúng ta nhấn CTRL + C trên Bàn phím, Hệ điều hành (Cả Windows và Linux) sẽ tạo ra tín hiệu SIGINT được gửi đến chương trình hiện đang hoạt động


Không phải tất cả các tín hiệu đều khả dụng trên tất cả các hệ thống. Tín hiệu khác nhau giữa các hệ điều hành (Linux/Windows)


Thêm MẹoĐặt câu hỏiNhận xétTải xuống

Bước 4. Kiểm tra các tín hiệu khả dụng trong hệ điều hành của bạn

Vì không phải tất cả các tín hiệu đều khả dụng trong mọi hệ điều hành, nên bạn nên biết những tín hiệu nào khả dụng trên hệ thống của mình

Ở đây chúng ta sẽ sử dụng Python 3 (Python 3. 9. x) và để truy cập các tín hiệu, chúng tôi phải nhập mô-đun tín hiệu

import signal    # Import signal module 

# available signals on our System
valid_signals = signal.valid_signals() # requires python 3.9.0
# returns a SET

print('Number of Available Signals ->', len(valid_signals) , '\n')
for i in valid_signals:
print(i)

Đoạn mã trên sẽ in các tín hiệu có sẵn trên một hệ điều hành cụ thể. Tải xuống mã đầy đủ từ Github

Đây

valid_signals = signal.valid_signals()

trả về một tập hợp các tín hiệu dành riêng cho hệ điều hành có sẵn, sau đó được in ra

Tín hiệu hệ điều hành khả dụng trên Windows 10

Trình xử lý Python Ctrl-C


Thêm MẹoĐặt câu hỏiNhận xétTải xuống

Bước 5. Tín hiệu lập trình trên Python 3

Để sử dụng Tín hiệu mà tập lệnh của chúng tôi nhận được, chúng tôi phải thực hiện hai việc

  1. Viết Trình xử lý tín hiệu sẽ thực hiện xử lý tùy chỉnh khi nhận được Tín hiệu
  2. Đăng ký Signal với chức năng Signal Handler
import signal

def your_custom_signal_handler(signal_number,frame):
code to do something
code to do something
code to do something

signal.signal(signal.SIGNALNAME,your_custom_signal_handler)


Ở đây chúng tôi sẽ sử dụng tín hiệu SIGINT để kiểm soát việc thực thi tập lệnh Python 3 của chúng tôi

SIGINT Signal phổ biến cho cả hệ thống Windows và Linux và giúp chúng tôi chạy mã của mình trên cả Hệ thống Windows và Linux

Vui lòng sử dụng mã từ Github

import signal # Import signal module

def SignalHandler_SIGINT(SignalNumber,Frame):
print('SignalHandler of signal.SIGINT')

#register the signal with Signal handler
signal.signal(signal.SIGINT,SignalHandler_SIGINT)

while 1:
print("Press Ctrl + C ")
time.sleep(1)

Đây

def SignalHandler_SIGINT(SignalNumber,Frame):

là Trình xử lý tín hiệu, Vì vậy, khi SIGINT tín hiệu được tạo, hàm này được gọi và câu lệnh print() bên dưới được gọi

tuyên bố

signal.signal(signal.SIGINT,SignalHandler_SIGINT)

đăng ký hàm xử lý tín hiệu SignalHandler_SIGINT(SignalNumber,Frame). với tín hiệu SIGINT signal. KÝ HIỆU

Xin lưu ý rằng mã phải được chạy dưới dòng lệnh

Trình xử lý Python Ctrl-C

Nếu bạn sử dụng một IDE như Thonny hoặc IDLE, thì IDE đó có xu hướng cản trở việc nhận tín hiệu SIGINT

Thêm MẹoĐặt câu hỏiNhận xétTải xuống

Bước 6. Thoát an toàn khỏi vòng lặp vô hạn trong Python bằng CTRL + C (SIGINT)

Trong ví dụ này, chúng ta sẽ tìm hiểu cách thoát khỏi vòng lặp vô hạn trong Python 3 một cách an toàn bằng cách sử dụng các tín hiệu

Trong một số ứng dụng như Phần mềm hệ thống thu thập dữ liệu cổng nối tiếp được viết bằng Python, chúng tôi phải truy vấn một cảm biến hoặc Bộ vi điều khiển như bo mạch Arduino hoặc Raspberry Pi liên tục trong một vòng lặp vô hạn

Trong các ứng dụng đó, chúng ta có thể sử dụng tín hiệu SIGINT (CTRL + C) để ngắt vòng lặp vô hạn và đóng ứng dụng một cách an toàn mà không bị rò rỉ tài nguyên

Làm cách nào để xử lý Ctrl C trong tập lệnh Python?

Hoạt động của mã tín hiệu SIGINT Python . When you hit CTRL +C on the Keyboard , A SIGINT signal is generated by the OS (Windows/Linux) and send to the executing script.

Tại sao Python không thoát Ctrl C?

Đó là do thiết kế của trình thông dịch Python và phiên tương tác . Ctrl + C gửi một tín hiệu, SIGINT, tới quy trình Python mà trình thông dịch Python xử lý bằng cách tăng ngoại lệ KeyboardInterrupt trong phạm vi hiện đang chạy.

Ctrl Z trong Python là gì?

CTRL-Z được sử dụng làm điểm đánh dấu kết thúc tin nhắn khi gửi SMS ở chế độ văn bản với AT+CMGS=. lệnh .

Làm cách nào để phát hiện chấm dứt trong Python?

Để phát hiện thoát tập lệnh, chúng ta có thể sử dụng thư viện atexit tích hợp sẵn của Python . Mô-đun atexit được sử dụng để đăng ký hoặc hủy đăng ký các chức năng xử lý dọn dẹp. Các chức năng được đăng ký bởi atexit sẽ tự động được gọi khi kết thúc trình thông dịch.