gpt4 book ai didi

python - 从 subprocess.Popen 获取多个命令的输出

转载 作者:行者123 更新时间:2023-12-01 05:16:21 25 4
gpt4 key购买 nike

我正在尝试运行一个命令,获取它的输出,然后在同一环境中运行另一个命令(假设我在第一个命令中设置了一个环境变量,我希望它可用于第二个命令)。我试过这个:

import subprocess

process = subprocess.Popen("/bin/bash", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE);

process.stdin.write("export MyVar=\"Test\"\n")
process.stdin.write("echo $MyVar\n")
process.stdin.flush()

stdout, stderr = process.communicate()
print "stdout: " + str(stdout)

# Do it again
process.stdin.write("echo $MyVar\n")
process.stdin.flush()

stdout, stderr = process.communicate()
print "stdout: " + str(stdout)

但是communicate()会一直读到最后,所以这不是一个有效的技术。 (我明白了:)

stdout: Test

Traceback (most recent call last):
File "./MultipleCommands.py", line 15, in <module>
process.stdin.write("echo $MyVar\n")
ValueError: I/O operation on closed file

我见过这个:https://stackoverflow.com/a/15654218/284529 ,但它没有给出如何执行其建议的工作示例。谁能演示如何做到这一点?我还看到了其他涉及在循环中不断检查输出的技术,但这不符合“获取命令的输出”的心态 - 它只是将其视为流。

最佳答案

要获取多个命令的输出,只需将它们组合到一个脚本中即可:

#!/usr/bin/env python
import subprocess
import sys

output = subprocess.check_output("""
export MyVar="Test"
echo $MyVar
echo ${MyVar/est/ick}
""", shell=True, executable='/bin/bash', universal_newlines=True)
sys.stdout.write(output)

输出

Test
Tick

关于python - 从 subprocess.Popen 获取多个命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com