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

时间:2019-05-14 02:37:31

标签: 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)

打印在我的外壳上的结果是{1..3}

但是我想要的结果是:

1
2
3

就像我在shell中执行代码时一样。 希望对解决此问题有任何见解,谢谢!

3 个答案:

答案 0 :(得分:1)

我建议使用subprocess.popen:

import tensorflow as tf
ckpt_path = "test/test.ckpt"

w1 = tf.placeholder("float", name="w1")
w2 = tf.placeholder("float", name="w2")
bias = tf.Variable(2.0, name="bias")
feed_dict = {w1: 4, w2: 8}

w3 = tf.add(w1, w2 , name="op_to_restore")

sess = tf.Session()
sess.run(tf.global_variables_initializer())

saver = tf.train.Saver() #

print(sess.run(w3, feed_dict))

saver.save(sess, ckpt_path)

或者,使用原始代码行:

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 Pypi Docs

致谢,希望对您有所帮助。

答案 1 :(得分:0)

您想生成一个子shell:

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

答案 2 :(得分:0)

对于python3:

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