0

何かを行う方法を理解するのに苦労しています。ファブリックでは直感的であるべきだと思います。リモートで実行されたコマンドの結果である stdout をキャプチャし、その結果を後続のリモート呼び出しで使用したいと考えています。

しかし、私は本当に理解できないエラーが発生しています。自分のしていることには複数の問題があるように感じますが、どこから始めればよいかわかりません。おそらく、誰かがこれを分解するのを手伝ってくれるでしょう。

私が持っているもの:

...
with cd(env.repo):
    abbrev_hash = run('git log -1 --pretty="%h"')
run("rsync -r --exclude '.git/*' %s %s" % (env.repo, abbrev_hash))
... 

関連する出力:

[cookcountyjail.recoveredfactory.net] 実行: git log -1 --pretty="%h" [cookcountyjail.recoveredfactory.net] out: [cookcountyjail.recoveredfactory.net] out: c6d4ea0 [cookcountyjail.recoveredfactory.net] out: [ cookcountyjail.recoveredfactory.net] 出力: [cookcountyjail.recoveredfactory.net] 実行: rsync -r --exclude '.git/*' > /home/ubuntu/repos/cookcoc6d4ea0l_2.0-dev

[cookcountyjail.recoveredfactory.net] out: /bin/bash: -c: 1 行目: 予期しないトークン付近の構文エラーnewline' [cookcountyjail.recoveredfactory.net] out: /bin/bash: -c: line 1: [cookcountyjail.recoveredfactory.net] out: ' [cookcountyjail.recoveredfactory.net] out:

致命的なエラー: run() は、実行中にゼロ以外のリターン コード 1 を受け取りました!

c6d4ea0ed: rsync -r --exclude '.git/*' /home/ubuntu/repos/cookcountyjail_2.0-dev

実行: /bin/bash -l -c "cd /home/ubuntu/website/2.0/websites && export PATH=\"\$PATH:\"/home/ubuntu/website/2.0/websites/active\"\" && rsync -r --exclude '.git/*' /home/ubuntu/repos/cookcouc6d4ea0_2.0-dev "

4

1 に答える 1

2

これはあなたが望むことをしませんか?

def t1():
    captured = local('ls -alh')
    print captured

http://docs.fabfile.org/en/1.8/api/core/operations.html#fabric.operations.run

run は、リモート プログラムの stdout の結果を単一の (おそらく複数行の) 文字列として返します。この文字列は、コマンドが失敗したか成功したかを指定する失敗および成功のブール属性を示し、return_code 属性として戻りコードも含みます。さらに、要求されたコマンド文字列と実際に実行されたコマンド文字列のコピーが、それぞれ .command および .real_command として含まれています。

localドキュメントにはこのビットもあります:

http://docs.fabfile.org/en/1.8/api/core/operations.html#fabric.operations.local

local は現在、run/sudo のように出力の印刷とキャプチャを同時に行うことができません。キャプチャ kwarg を使用すると、必要に応じて印刷とキャプチャを切り替えることができます。デフォルトは False です。

capture=False の場合、ローカル サブプロセスの stdout および stderr ストリームは端末に直接接続されますが、グローバル出力コントロール output.stdout および output.stderr を使用して、必要に応じて一方または両方を非表示にすることができます。このモードでは、戻り値の stdout/stderr 値は常に空です。

capture=True の場合、サブプロセスからの出力は端末に表示されませんが、戻り値にはキャプチャされた stdout/stderr が含まれます。

いずれの場合も、run や sudo と同様に、この戻り値は return_code、stderr、failed、successed 属性を示します。詳細については、実行を参照してください。

于 2013-10-11T04:53:46.577 に答える