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

Python 如何在Subprocess.run命令中使用for循环,python,bash,subprocess,Python,Bash,Subprocess,我正在使用subprocess.run运行一个命令,该命令中有一个for循环,但没有返回预期的结果。这里有一个简单的例子来说明这个问题。 在bash shell中: {1..3}中i的;do echo${i};完成 结果是: 1 2 3 这就是我所期望和想要的。但是,在我的代码中,当我执行以下操作时: subprocess.run(“for i in{1..3};do echo${i};done”,shell=True,check=True) 我的shell上打印的结果是{1..3} 但我希望

我正在使用
subprocess.run
运行一个命令,该命令中有一个for循环,但没有返回预期的结果。这里有一个简单的例子来说明这个问题。 在bash shell中:

{1..3}中i的
;do echo${i};完成

结果是:

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中执行代码一样。
如果您有任何关于如何解决此问题的见解,将不胜感激,谢谢

您可能希望生成子shell:

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

我建议使用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)
我能够从位于此处的子流程文档中收集此信息:

您好,我希望这对您有所帮助。

对于python3:

import subprocess
result = subprocess.getoutput("""for i in {1..3}; do echo ${i}; done""")
print(result)

感谢您的回答,这仍然会给我
{1..3}
结果。这给了你
1 2 3
结果吗?谢谢你的回答,这还是给了我
{1..3}
结果。这是否给出了
1 2 3
结果?谢谢你的回答!没问题!