Python - 将变量发送到子进程

问题描述:

我有一个IP地址列表,我需要在远程运行curl命令。 我正在使用for循环遍历ips。Python - 将变量发送到子进程

,我需要远程运行的命令是

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) 

但它似乎没有工作。我怎样才能使这个工作?

+0

你需要SSH连接到机器上执行命令? – Pigueiras

+0

@Pigueiras由于防火墙的限制,curl命令只能在我登录的节点上运行。 –

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

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)