
各位帅哥,我写了个脚本,作用是,持续地把串口的打印保存到一个文本里,然后可以自定义时间后停止。 代码如下,但是停止后,似乎因为没有保存,导致文本是空的,怎么写可以实现这个目的呢。
import serial from multiprocessing import Process as process from time import sleep import sys def get_print(comport): ser = serial.Serial(comport,baudrate=115200,bytesize=8,parity='N',stopbits=1,timeout=1) with open('m3.txt','w',encoding="gb18030") as f: while 1: if ser.inWaiting(): x=ser.read(150) lll = x.decode('gb18030','replace') f.write(lll) if __name__ == '__main__': p1 = process(target=get_print, args=('com7',)) p1.daemon=True p1.start() sleep(10) sys.exit('ok') 1 Hstar 2020-05-06 17:49:34 +08:00 两种思路,其实没区别都是在 get_print 函数的 while 1 这个地方做文章 1. 把 10 这个变量传进 get_print 函数,在 while 1 这个地方一直比对是否超过 10 秒了 2. 看一下多线程 /进程的 Event 对象,初始化一个锁传进 get_print 函数,while 1 这个地方观察锁是否还在,十秒后把这个锁 clear 掉,让 get_print 停住 无论怎么样 sys.exit('ok')都要换成 p1.join() |
2 renmu 2020-05-06 17:54:32 +08:00 via Android 提醒一下多进程文件写入会导致混乱,这件事应该用单进程就能用,你用 sleep 直接把主进场堵死了,四舍五入还是只有一个进程在工作 |
3 BingoXuan 2020-05-06 17:56:40 +08:00 用 Thread 类启动线程,加一个实例变量控制线程运行,时间到了就修改变量值停止线程并保存数据 |
4 Kilerd 2020-05-06 18:02:21 +08:00 Python 只能单线程( |
5 Vegetable 2020-05-06 18:11:37 +08:00 |
6 crella 2020-05-06 19:24:51 +08:00 via Android while 判断全局变量,如果 false,则关闭文件 io,同时 break |