[英]Piping long-running processes
我是Linux / Python编程的新手。 我尝试使用Google搜索,但是找不到任何有用的信息。
我编写了一个简单的脚本,该脚本从串行端口读取行并将它们(在读取时)打印到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!
我究竟做错了什么?
感谢您对此的任何帮助。
最好的祝福
这可能是与缓冲标准输出有关的问题。 尝试使用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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.