簡體   English   中英

如何從標准輸入連續讀取(不僅僅是輸入文件完成后)?

[英]How to continuously read from stdin (not just once input file is done)?

我有這兩個腳本:

時鍾.py

#!/usr/bin/env python3
import time
while True: 
    print("True",flush=True)
    time.sleep(1)

連續_wc.py

#!/usr/bin/env python3
import sys
def main():
    count = 0
    for line in sys.stdin:
        sys.stdout.write(str(count))
        count += 1
if __name__=='__main__':
    main()

我像這樣運行它們。

./clock.py | ./continuous_wc.py

我希望它打印:

1
2
3
4
5
...

每一秒都像時鍾一樣。 因為它基本上計算文件中的行數。 但不,它沒有 output 任何東西。 為什么不?

除了print(x, flush=True)您還必須在sys.stdout.write之后刷新。

請注意,這些程序在技術上可以在沒有刷新的情況下工作,但是它們會以非常大的塊非常少地打印值,因為 Python IO 緩沖區是許多千字節。 沖洗是為了讓它更實時地工作。

    sys.stdout.write(str(count))
    sys.stdout.flush()

使用大家的建議,這就是我現在所擁有的:

時鍾.py

#!/usr/bin/env python3
import time
while True:
    print("True",flush=True) 
    time.sleep(1)

連續_wc.py

#!/usr/bin/env python3
import sys
def main():
    count = 0
    for line in sys.stdin:
        print(count,flush=True,end='\r')
        count += 1
if __name__=='__main__':
    main()

我必須在寫入和讀取腳本中都使用 flush=True 。 但是,當使用 PYTHONUNBUFFERED=1 時,我可以跳過它並且它起作用了。 謝謝@Mark Setchell。 此外,我正在使用 print 和 stdin,但似乎 fileinput.input 也可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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