关闭用作Popen标准参数的文件对象的正确方法

2024-09-24 22:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的脚本中,我将stdout重定向到一个文件,如下所示:

with open(logFileName, 'w') as fp:
  proc = Popen([myexe], stdout=fp)
  # proc.wait() # I don't want to block until process completes.

我知道fp将在流程完成之前关闭。 因此,我的程序没有按预期工作

如果我执行wait(),它将工作,但我不想阻塞

我想知道做这件事的正确方法是什么。单独的线程是唯一的方法吗?令人惊讶的是,我无法通过谷歌找到答案,这一要求应该是非常普遍的

更新:我发现它不起作用的原因不同。即使在进程完成之前文件对象也会关闭,它仍然可以正常工作。仍然不确定这样做是否正确


Tags: 文件方法脚本aswithstdoutprocopen
1条回答
网友
1楼 · 发布于 2024-09-24 22:25:10

使用子流程:

import subprocess

with open(logFileName, 'w') as fp:
    p = subprocess.Popen( [myexec], stdout=subprocess.PIPE, stderr=subprocess.PIPE )
    fp, error_msg = p.communicate()

相关问题 更多 >