70

通常、Fabric は、run() 呼び出しがゼロ以外の終了コードを返すとすぐに終了します。ただし、一部の呼び出しでは、これが予想されます。たとえば、ファイルを圧縮できない場合、PNGOut はエラー コード 2 を返します。

do_something_that_fails || true現在、シェル ロジック (または)を使用してこの制限を回避することしかできませんdo_something_that_fails || do_something_elseが、(Fabric の約束のように) プレーンな Python でロジックを保持できるようにしたいと考えています。

ファブリックがパニックになって死ぬのではなく、エラー コードをチェックして対応する方法はありますか? 私はまだ他の呼び出しのデフォルトの動作を望んでいるので、環境を変更して動作を変更することは良い選択肢のようには思えません (そして、私が思い出す限り、とにかく死ぬのではなく、警告するように指示するためにのみ使用できます)。

4

4 に答える 4

29

はい、できます。環境を変更するだけabort_exceptionです。例えば:

from fabric.api import settings

class FabricException(Exception):
    pass

with settings(abort_exception = FabricException):
    try:
        run(<something that might fail>)
    except FabricException:
        <handle the exception>

のドキュメントabort_exceptionこちらです。

于 2014-08-13T18:13:22.967 に答える
4

どうやら環境をいじること答えです。

fabric.api.settingsコンテキストマネージャー(を使用with)として使用して、個々のステートメントに適用できます。run()local()および呼び出しの戻り値はsudo()、シェルコマンドの出力だけでなく、エラーへの対応を可能にする特別なプロパティ(return_codeおよび)もあります。failed

subprocess.PopenPythonの通常の例外処理の動作に近いものを探していたと思います。

于 2011-02-03T16:40:39.277 に答える