PythonライブラリFabricを使用して、リモートサーバーのメンテナンスを行っています。コマンドをステートメントと組み合わせてラップしない限り、Fabricはリモートコマンドとローカルコマンドへのすべての応答を自動的に出力します。そのように、ローカルマシンでは、
with settings(warn_only='true'):
with hide('running', 'stdout', 'stderr', 'warnings'):
output = local("uname -a", True)
またはリモートマシンでこのように:
with settings(warn_only='true'):
with hide('running', 'stdout', 'stderr', 'warnings'):
output = run("uname -a")
私は長くて複雑なタスクを書いていますが、ステートメントを使ってこれら2つを何度も繰り返しています。その繰り返しを防ぐために、_mute()という関数を書きたいと思います。それは私にこのようなことをさせてくれるでしょう:
def _mute(fabric_cmd, args):
with settings(warn_only='true'):
with hide('running', 'stdout', 'stderr', 'warnings'):
output = fabric_cmd(args)
return output
def some_remote_task():
# Run a remote task silently
_mute(remote, 'uname -a')
def some_local_task():
# Run a local task silently
_mute(local, 'uname -a', True)
私はいくつかの解決策を調べましたが、「eval」が私のためにこれを行うことができることを知っています。しかし、私がevalについて読んだすべてのページは、セキュリティの問題のために、ほとんどの場合、それは悪い考えであることを示唆しています。パーシャルを調べましたが、_mute関数で引数を呼び出し可能にする方法がわかりませんでした。私がここで見逃しているより高いレベルのPythonの概念があると思います。これを行うためのPythonの方法は何ですか?あなたが提供できるかもしれないどんな方向にも感謝します。