如何在非交互模式下实现DTR脉冲触发与串口输出日志记录?
串口设备输出记录方案(含DTR重置与持久化运行)
一、Python脚本实现
先安装依赖:
pip install pyserial
创建serial-logger.py脚本,实现DTR脉冲重置+串口输出定向到stdout:
import serial import time import sys def pulse_dtr(port, duration=1): # 初始化串口(波特率可根据设备实际参数调整) ser = serial.Serial(port, baudrate=9600, timeout=1) # 发送1秒DTR重置脉冲:拉低DTR保持1秒后恢复 ser.dtr = False time.sleep(duration) ser.dtr = True return ser if __name__ == "__main__": if len(sys.argv) != 2: print(f"用法: {sys.argv[0]} /dev/ttyUSB0") sys.exit(1) port = sys.argv[1] try: ser = pulse_dtr(port) print(f"已发送1秒DTR脉冲,开始读取{port}输出...") # 持续读取串口输出并定向到stdout while True: line = ser.readline() if line: sys.stdout.buffer.write(line) sys.stdout.flush() except KeyboardInterrupt: print("\n停止读取") ser.close() except Exception as e: print(f"错误: {e}") sys.exit(1)
运行脚本并对接日志工具:
python serial-logger.py /dev/ttyUSB0 | multilog s10000000 n5 ~/logs/
二、systemd用户服务持久化运行
通过systemd用户服务实现会话结束后程序仍保持运行:
- 创建服务配置文件
~/.config/systemd/user/serial-logger.service:
[Unit] Description=串口设备日志记录服务 After=default.target [Service] Type=simple # 替换为你的脚本实际路径和串口设备 ExecStart=/usr/bin/python3 /home/your-user/serial-logger.py /dev/ttyUSB0 # 如需直接对接multilog,改用下面的ExecStart # ExecStart=/bin/sh -c "/usr/bin/python3 /home/your-user/serial-logger.py /dev/ttyUSB0 | multilog s10000000 n5 %h/logs/" StandardOutput=journal+console StandardError=journal Restart=on-failure RestartSec=5 [Install] WantedBy=default.target
- 执行以下命令管理服务:
# 重载systemd配置 systemctl --user daemon-reload # 启动服务 systemctl --user start serial-logger.service # 设置开机自启 systemctl --user enable serial-logger.service # 实时查看服务日志 journalctl --user -u serial-logger.service -f
内容的提问来源于stack exchange,提问作者AlexLoss
相关产品推荐
相关产品推荐

