我对Linux / Python编程很新。我尝试使用谷歌搜索,但找不到任何有用的东西。
我写了一个简单的脚本,它从串口读取行并将它们(当它们被读取时)打印到stdout。这是相关代码:
ser = serial.Serial(args.port)
while True:
print(ser.readline())
我还编写了一个脚本(这仅用于测试目的),它将从stdin读取的行回显到stdout。这是代码:
while True:
print(args.prefix + input())
我使用python3,脚本分别命名为serial.py和echo.py。
我想要做的是将串行输出传输到echo的输入(echo稍后将被写入数据库的脚本替换),并使它们无限期地运行。
我分别尝试了两个脚本并且它们工作正常,但是当我管道两个命令时都没有打印出来:
./serial.py --port /dev/ttyACM0 | ./echo.py
当我将回声传递给自己时,它确实有效:
awer@napalm:~$ ./echo.py --prefix AAA | ./echo.py --prefix BBB
hi!
BBBAAAhi!
我做错了什么?
感谢您提供任何帮助。
祝你好运
答案 0 :(得分:0)
这可能是与缓冲的标准输出相关的问题。尝试使用' -u'运行serial.py。 python3解释器的标志,它将强制stdout和stderr无法缓冲,如文档所述:
-u Force the binary I/O layers of stdout and stderr to be unbuffered. stdin is always buffered. The text I/O layer will still be line-buffered.