我是 Linux/Python 编程的新手。我试着用谷歌搜索这个,但找不到任何有用的东西。
我写了一个简单的脚本,它从串行端口读取行并将它们打印(在读取时)到标准输出。这是相关代码:
ser = serial.Serial(args.port)
while True:
print(ser.readline())
我还编写了一个脚本(这仅用于测试目的),它将从标准输入读取的行回显到标准输出。这是相关代码:
while True:
print(args.prefix + input())
我用的是python3,脚本分别命名为serial.py和echo.py
我想做的是将 serial 的输出通过管道传输到 echo 的输入(echo 稍后将被写入数据库的脚本替换),并让它们无限期地运行。
我分别尝试了这两个脚本并且它们工作正常,但是当我通过管道传输这两个命令时没有打印任何内容:
./serial.py --port /dev/ttyACM0 | ./echo.py
当我将 echo 传送给它自己时,它确实有效:
awer@napalm:~$ ./echo.py --prefix AAA | ./echo.py --prefix BBB
hi!
BBBAAAhi!
我做错了什么?
感谢您对此的任何帮助。
最好的问候
最佳答案
这可能是与缓冲标准输出相关的问题。尝试使用 python3 解释器的“-u”标志运行 serial.py,这将强制 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.
关于python - 管道长时间运行的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40158372/