从执行进一步进程的 subprocess.Popen 个命令捕获输出

Capture output from subprocess.Popen commands that execute further processes

已解决:用户错误。

我有一个 python 程序,它必须使用一些我不能 access/control 的其他专有脚本。我使用

启动专有 (bash) 脚本
logfile = open('/file', 'a')
proc = subprocess.Popen(['/path/to/script/script','argument'], stdout=logfile, stderr=logfile)
proc.wait()

不幸的是,我必须执行的 bash 脚本然后执行了 Java 脚本并且 Java 脚本的输出被打印到我的终端而不是 logfile 我在 subprocess.Popen 调用中指定的。我不确定如何指定所有输出都需要转到日志文件,因为似乎 stdoutstderr 是控制输出流的唯一参数并且应该捕获它。

我试过使用 subprocess.PIPE 然后 proc.communicate 但它仍然出现在屏幕上。我也尝试过 shell=True 但它仍然会出现在屏幕上。我还设置了 sys.stdout=logfilesys.stderr=logfile 但它仍然会转到终端。

抱歉,可能正如预期的那样,这是用户错误。有一个 if/else 确定输出是否转到未正确触发的日志文件或终端。所以我最初发布的示例代码实际上并没有被触及。我应该添加一堆打印语句来更早地看到这个事实......它现在按预期工作。