2017-04-04 9 views
1

リモートでcurlコマンドを実行するために必要なIPアドレスのリストがあります。 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

3番目のパラメータは、おそらく1つの文字列として機能します。試してみてください:

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

私はあなたのやり方を思い出して、リストを渡していますが、多くの問題があったと思います。

代わりに、コード内のどこでも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) 
関連する問題