2017-06-05 12 views
1

ファブリックが1台のマシン上で複数のコマンドでどのように動作しているかを理解しようとしています。 私は各ホスト(何千ものホスト)でいくつかのコマンドを実行する必要があり、何が最善であるかを知りたいと思います。pythonファブリック複数のコマンド

res_1 = run(command_1) 
res_2 = run(command_2) 
... 
... 
res_n = run(command_n) 

または::複数の実行使用

私が知りたいのは何

res = run(command_1 && command_2 && ... command_n) 
res.splitlines() 
res_1 = res[0] 
res_2 = res[1] 
... 
... 
res_n = res[n-1] 

は、ファブリックは、それが複数のセッションを開いたり、同じセッション内のすべてのコマンドを実行しますが、複数の実行を処理する方法ですか?

答えて

1

複数のrunコールを使用する場合でも、runコールを使用する場合も、&&のAFAIKファブリックは1つのネットワーク接続のみを開きます。この2つの違いは、それぞれ新しいrunが異なる環境で実行されることです。たとえば、これを試すことができます。

run('ls') 
run('cd /tmp/') 
run('ls') 

どちらの場合でも、ホームディレクトリの一覧が表示されます。あなたはこの

run('ls') 
run('cd /tmp/ && ls') 

をしようとした場合、それは/tmp/のリストに続いて、あなたの最初の時間を自分のホームディレクトリが表示されます。したがって、1つのコマンドから別のコマンドに状態を保存する場合は、run('cmd1 && cmd1')を実行する必要がありますが、気にかけなければ複数のrunコールを使用する必要があります。

+0

私のコマンドは互いに独立しているので、複数の 'run' ? –

+0

はい、何もしなければ複数の '実行'を使用します。彼らはより読みやすくなります。 – e4c5

0

これらの2つのアプローチの重要な違いは、最初のコマンドの終了ステータスに関係なく、最初のコマンドがすべてのコマンドを実行することです。 2番目のコマンドは、command_1がエラーを返さなかった場合などにのみcommmand_2を実行します。したがって、この動作や他の動作が必要な場合は、あなた次第です。

+0

スタイル1またはスタイル2を使用するかどうかにかかわらず、コマンドがゼロ以外の終了状態を返す場合、ファブリックは残りの部分を実行しません。私は非常に間違っています。 – e4c5

+0

私は覚えています - 'warn_only 'が' True'に設定されている場合、あなたが言ったように動作します。 –

+0

私が理解しようとしているのは、複数の 'run'を使うと"ネットワークオーバーヘッド "が増え、複数のコマンドを実行するのに' run'を使う場合です。 –

関連する問題