簡體   English   中英

python子進程在運行時即時發送粗壯

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

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