中断代码时如何关闭串行连接
How do I close serial connection when I interrupt code
我有以下 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()
,否则我无法再次启动脚本(在同一控制台中)。
如何在中断脚本时自动关闭串口通信?
使用 try/finally 块来确保关闭被调用:
try:
while 1:
x = ser.readline()
....
finally:
ser.close()
您可以使用 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
语句时,with
语句将自动关闭ser
和text_file
。在您的情况下,这可能是一个例外。 PEP 343 引入了 with
语句,以使用上下文管理器删除 try/finaly
语句。
我有以下 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()
,否则我无法再次启动脚本(在同一控制台中)。
如何在中断脚本时自动关闭串口通信?
使用 try/finally 块来确保关闭被调用:
try:
while 1:
x = ser.readline()
....
finally:
ser.close()
您可以使用 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
语句时,with
语句将自动关闭ser
和text_file
。在您的情况下,这可能是一个例外。 PEP 343 引入了 with
语句,以使用上下文管理器删除 try/finaly
语句。