[英]python subprocess send stout on the fly when running
有沒有辦法讓child.py在運行時“即時”發送粗壯?
還是main.py需要等待child.py終止?
在這些腳本中, main.py需要等待 5 秒才能開始打印所有行。
當child.py仍在運行時,我希望process.stdout.readline()
獲得child.py中的最后一個print
。
主文件
import subprocess
import time
process = subprocess.Popen(["./child.py"], stdout=subprocess.PIPE)
i = 1
while i < 5:
print(process.stdout.readline()) #to print, child.py needs to terminate before
time.sleep(1)
i+=1
孩子.py
#!/usr/bin/env python3
# coding=utf-8
import sys
import time
def run():
i = 1
while i < 5:
time.sleep(1)
print(f'ok {i}')
i+=1
if __name__ == "__main__":
run()
在 child.py 你這樣寫:
print(f'ok {i}')
用這個替換它:
print(f'ok {i}', flush=True)
當交互式測試時 isatty() 返回 True,因此 child.py 將默認為無緩沖行為。 每一行輸出都會立即出現。
當作為連接到管道的子進程運行時,您會看到它默認為緩沖行為。 使用 flush() 調用來解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.