shell 非交互模式下的脉冲DTR和对数串行输出

r1zhe5dt  于 2023-03-13  发布在  Shell
关注(0)|答案(1)|浏览(81)

我想记录设备的串行输出。
为此,我需要
1.发送1秒DTR脉冲,重置器械
1.使用输出到stdout的非交互式串行监视器
到目前为止,我还没有发现任何shell工具可以在非交互模式下执行这两个操作,我们的想法是从systemd用户服务启动它,这样程序就可以在用户会话停止后持续运行。

示例

$ pulse-dtr /dev/ttyUSB0
$ serial-read /dev/ttyUSB0 |  multilog s10000000 n5 ~/logs/

PS:我也欢迎简单的Python脚本

sg24os4d

sg24os4d1#

你可以用Python pyserial来操作DTR信号,你的发行版中可能有一个类似名称的包,但是有些usb串行设备可能没有实现它,你可以用这个包来设置波特率并从端口读取:

#!/usr/bin/python3
# https://stackoverflow.com/a/75688106/5008284
import sys, time
import serial

tty = serial.Serial("/dev/ttyS0", baudrate=9600)
tty.dtr = True
time.sleep(1)
tty.dtr = False
sys.stdout = open(sys.stdout.fileno(), mode='wb', buffering=0)
while True:
    ch = tty.read()
    sys.stdout.write(ch)

您可能需要将dtr设置为False then True,而不是True then False。此程序读取单个字符,并将其无缓冲地写入stdout,以便您可以将其通过管道传输到另一个程序。

相关问题