Python - 将变量发送到子流程

时间:2017-04-04 20:19:16

标签: python subprocess

我有一个在Remotely上运行curl命令所需的IP地址列表。 我正在使用for循环遍历ips。

我需要远程运行的命令是

curl --silent http://<IP>:9200/_cat/master | awk '{print $2}'

以上输出将返回群集中主节点的IP地址。

我的代码说明了

status = subprocess.Popen(["ssh", "%s" % ip, "curl http://ip:9200/_cat/master | awk '{print $2}'"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

我无法将ip变量作为命令的一部分传递。

我也尝试过这样做。

status = subprocess.Popen(["ssh", "%s" % ip, "curl http://",ip,":9200/_cat/master | awk '{print $2}'"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

但它似乎不起作用。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:0)

第三个参数可能更适合作为一个字符串。尝试:

status = subprocess.Popen(
    ["ssh", "%s" % ip, 
     "curl http://%s:9200/_cat/master | awk '{print $2}'" % ip
    ], ....

答案 1 :(得分:0)

我想我记得以自己的方式尝试,传递列表,但有很多问题。

相反,我已经决定在我的代码中传递一个单独的执行字符串。

popen = subprocess.Popen(
"ping -n 1 %s" % "192.168.1.10",
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)

我使用该列表的一个案例是一个非常简单的exe调用

popen = Popen( [sys.executable, script_name], stdout=output_file, stderr=output_file )