Python while 循环读取串行数据按 Ctrl + C 后不退出

问题描述 投票:0回答:1

我有以下 Python 3.9 while True 循环,它读取来自 Teensy 4.1 的数据,按“Ctrl + C”后不会退出。

只有“Ctrl + \”和“Ctrl + Z”停止/暂停程序的执行。

data = ""

while True:
    data += ser.read(ser.inWaiting()).decode("utf-8")

    if (not data.endswith("\n")) or data == "":
        continue

    print(data)
    data = ""

在读取数据的行周围添加 try- except 块也不起作用:

data = ""

while True:
    try:
        data += ser.read(ser.inWaiting()).decode("utf-8")

    except KeyboardInterrupt:
        print("stopped")
        exit()

    if (not data.endswith("\n")) or data == "":
        continue

    print(data)
    data = ""

如何确保Ctrl + C会停止程序的执行?

python linux arduino signals pyserial
1个回答
0
投票

我认为这是行不通的,除非你要用线程做一些事情。原因是“普通”python 是单线程的。您的

ser.read
正忙于“外部”python,无法接受 SIGINT (= ctrl+C) 信号。如果您向其发送 SIGQUIT (= ctrl+\) 信号,则
ser.read
终止并且您的脚本终止。

© www.soinside.com 2019 - 2024. All rights reserved.