为什么在 python 子进程中捕获 TimeExpired 异常丢失标准输出?

问题描述 投票:0回答:0

app.py

import subprocess
import time

if __name__ == '__main__':
    outs = ''
    p = subprocess.Popen(['python3', 'app2.py'], stdout=subprocess.PIPE,
                          text=True)
    
    try:
          p.communicate(timeout=3)
    except subprocess.TimeoutExpired:
          p.kill()
          outs, _ = p.communicate()
          print(outs)

app2.py

import subprocess
import time

if __name__ == '__main__':
    while True:
        print("counter")
        time.sleep(1)

根据文档(https://docs.python.org/3/library/subprocess.html

如果进程在 timeout 秒后仍未终止,则会引发 TimeoutExpired 异常。捕获此异常并重试通信不会丢失任何输出。

然而运行

python3 app.py
实际上没有产生任何结果,为什么?

我阅读了所有文档并做了实验,但没有帮助

python subprocess popen
© www.soinside.com 2019 - 2024. All rights reserved.