中断代码时如何关闭串行连接

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

我有以下Python代码,它只是从Arduino读取,并写入文件:

import serial
from datetime import datetime
import time

ser = serial.Serial('COM3', 9600, timeout=0)

text_file = open("voltages.txt", 'w') 

while 1:
    x=ser.readline()
    print(str(datetime.now()), x) 
    data = [str(datetime.now()),x]
    text_file.write("{}\n".format(data))
    text_file.flush()
    time.sleep(1)

每当我中断脚本时,我总是必须在控制台中键入ser.close(),否则我无法再次启动脚本(在同一个控制台中)。

每当我中断脚本时,如何自动关闭串行通信?

python pyserial
2个回答
1
投票

使用try/finally块确保关闭称为:

try:
    while 1:
        x = ser.readline()
        ....
finally:
    ser.close()

1
投票

您可以使用with语句。

import serial
from datetime import datetime
import time

with serial.Serial('COM3', 9600, timeout=0) as ser, open("voltages.txt", 'w') as text_file:
    while True:
        x=ser.readline()
        print(str(datetime.now()), x) 
        data = [str(datetime.now()),x]
        text_file.write("{}\n".format(data))
        text_file.flush()
        time.sleep(1)

当执行离开with语句时,ser语句将自动关闭text_filewith。在您的情况下,这可能是一个例外。 PEP 343引入了with语句,通过使用上下文管理器来删除try/finaly语句。

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