python - 如何在 Subprocess.run 命令中使用 for 循环

标签 python bash subprocess

我正在使用subprocess.run运行其中包含 for 循环的命令但未返回预期结果。这是一个显示问题的简化案例。 在 bash shell 中:

for i in {1..3}; do echo ${i}; done

结果是:

1
2
3

这就是我所期望和想要的。但是,在我的代码中,当我执行以下操作时:

subprocess.run("for i in {1..3}; do echo ${i}; done", shell=True, check=True)

我的shell上打印的结果是 {1..3}

但我想要的结果是:

1
2
3

就像我在 shell 中执行代码时一样。 希望您能提供有关如何解决此问题的任何见解,谢谢!

最佳答案

我建议使用 subprocess.popen:

from subprocess import popen
process = subprocess.Popen("bash for i in {1..3}; do echo $i; done")
try:
    outs, errs = process.communicate(timeout=15)
except TimeoutExpired as e:
    process.kill()
    outs, errs = process.communicate()

或者,使用您原来的代码行:

subprocess.run("bash for i in {1..3}; do echo $i; done", shell=True, check=True, capture_output=True)

我能够从位于此处的子流程文档中看到此信息:Subprocess Pypi Docs

问候,希望这对您有所帮助。

关于python - 如何在 Subprocess.run 命令中使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122270/

相关文章:

python - 为什么 PATH 变量不影响 Windows 中的 subprocess.Popen

python pandas date time 输出日期相同

python - SWIG、C++ 和 Python : C++ temporary objects deleted too soon

python - 在 R 中使用 Arules 生成 2 项集规则

sql - 如何从 Oracle SQL 语句中读取数据并将其传递给其他 shell 脚本?

json - 输出多行 bash 变量以 curl json

python - AWS Boto/Warrant 库 : SRP authentication and credentials error

bash - 每次目录更改时设置一个 bash 变量

python - 子进程未创建 ffmpeg 命令的输出文件

python - 在流程开始执行后(在完成之前)向 subprocess.Popen() 提供标准输入