簡體   English   中英

管道長時間運行的流程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM