我正在使用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中执行代码时一样。 希望对解决此问题有任何见解,谢谢!
答案 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)