2017-04-04 35 views
1

我有一個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命令只能在我登錄的節點上運行。 –

回答

1

第三個參數可能會作爲一個字符串更好地工作。嘗試:

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

我想我記得嘗試一下你的方式,通過列表,但有很多問題。

相反,我決定在我的代碼中的任何地方傳遞一個執行字符串。

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)