Python-将变量发送到子流程

Python-将变量发送到子流程,python,subprocess,Python,Subprocess,我有一个IP地址列表,需要远程运行curl命令。 我正在使用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}

我有一个IP地址列表,需要远程运行
curl
命令。 我正在使用
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)

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

第三个参数作为一个字符串可能会工作得更好。尝试:

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

第三个参数作为一个字符串可能工作得更好。尝试:

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

我记得我试过你的方式,通过列表,但是有很多问题

相反,我决定在代码中的任何地方传递一个执行字符串

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 )

我记得我试过你的方式,通过列表,但是有很多问题

相反,我决定在代码中的任何地方传递一个执行字符串

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 )

是否需要SSH到计算机才能执行命令?@Pigueiras由于防火墙限制,curl命令只能在我登录的节点上运行。是否需要SSH到计算机才能执行命令?@Pigueiras由于防火墙限制,curl命令只能在我登录的节点上运行。