从执行进一步进程的 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
调用中指定的。我不确定如何指定所有输出都需要转到日志文件,因为似乎 stdout
和 stderr
是控制输出流的唯一参数并且应该捕获它。
我试过使用 subprocess.PIPE
然后 proc.communicate
但它仍然出现在屏幕上。我也尝试过 shell=True
但它仍然会出现在屏幕上。我还设置了 sys.stdout=logfile
和 sys.stderr=logfile
但它仍然会转到终端。
抱歉,可能正如预期的那样,这是用户错误。有一个 if/else 确定输出是否转到未正确触发的日志文件或终端。所以我最初发布的示例代码实际上并没有被触及。我应该添加一堆打印语句来更早地看到这个事实......它现在按预期工作。
已解决:用户错误。
我有一个 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
调用中指定的。我不确定如何指定所有输出都需要转到日志文件,因为似乎 stdout
和 stderr
是控制输出流的唯一参数并且应该捕获它。
我试过使用 subprocess.PIPE
然后 proc.communicate
但它仍然出现在屏幕上。我也尝试过 shell=True
但它仍然会出现在屏幕上。我还设置了 sys.stdout=logfile
和 sys.stderr=logfile
但它仍然会转到终端。
抱歉,可能正如预期的那样,这是用户错误。有一个 if/else 确定输出是否转到未正确触发的日志文件或终端。所以我最初发布的示例代码实际上并没有被触及。我应该添加一堆打印语句来更早地看到这个事实......它现在按预期工作。