python - 使用子进程运行多个 bash 命令

标签 python bash subprocess

如果我运行 echo a; echo b in bash 结果将是两个命令都运行。但是,如果我使用 subprocess 则运行第一个命令,打印出整个行的其余部分。 下面的代码回显 a; echo b 而不是 a b,如何让它同时运行这两个命令?

import subprocess, shlex
def subprocess_cmd(command):
    process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
    proc_stdout = process.communicate()[0].strip() 
    print proc_stdout

subprocess_cmd("echo a; echo b")

最佳答案

你必须在子进程中使用 shell=True 并且没有 shlex.split:

import subprocess

command = "echo a; echo b"

ret = subprocess.run(command, capture_output=True, shell=True)

# before Python 3.7:
# ret = subprocess.run(command, stdout=subprocess.PIPE, shell=True)

print(ret.stdout.decode())

返回:

a
b

关于python - 使用子进程运行多个 bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742789/

相关文章:

python - 如何根据 pep8 在 Python 中的函数定义中换行?

arrays - 复制一个包含空元素的 Bash 数组

linux - Bash 是否有办法获得有关表达式评估的详细输出?

python - 如何让 Python 的 subprocess() 与 input() 交互?

subprocess.call 的 Python 3 怪异行为

python - 无法在 Google App Engine Windows 上运行 Hello World

python - 在 Python 中对具有低阈值和高阈值的图像进行阈值处理

linux - 将变量传递给 shell 中的 grep

Python子进程没有属性 "check_output"

python - 插入具有唯一列的sqlite表