管道长期运行的流程

时间:2016-10-20 15:16:21

标签: python linux bash

我对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!

我做错了什么?

感谢您提供任何帮助。

祝你好运

1 个答案:

答案 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.