python - 管道长时间运行的进程

标签 python linux bash

我是 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/

相关文章:

python : Check for filename ending with an extension present in a list of extensions

linux - pvcreate 无法创建 PV。设备未找到/dev/sdxy(或被过滤忽略)

linux - 有谁知道 LD_PRELOAD 变量在哪个文件中?

python - 等待 dbus session 锁定/解锁消息

linux - bash,检测 mp4 文件

python - 根据第二个列表将 Python 列表拆分为自定义 block 大小

python - 试用PyQt4,无法抓取多个网页

bash - 使用扩展文件属性对目录中的文件进行排序

mac终端中的Bash osascript(AppleScript),顺序运行多个命令

Python ISO-8859-1 编码