web-dev-qa-db-ja.com

生地走行の出力を抑える簡単な方法は?

リモートマシンでコマンドを実行しています。

remote_output = run('mysqldump --no-data --user=username --password={0} database'.format(password))

出力をキャプチャしたいのですが、すべてを画面に出力しません。これを行う最も簡単な方法は何ですか?

30
Ben McCann

Managing output セクションはあなたが探しているもののようです。

コンソールから出力を非表示にするには、次のようなことを試してください:

from __future__ import with_statement
from fabric.api import hide, run, get

with hide('output'):
    run('mysqldump --no-data test | tee test.create_table')
    get('~/test.create_table', '~/test.create_table')

以下はサンプル結果です。

No hosts found. Please specify (single) Host string for connection: 192.168.6.142
[192.168.6.142] run: mysqldump --no-data test | tee test.create_table
[192.168.6.142] download: /home/quanta/test.create_table <- /home/quanta/test.create_table
33
quanta

ログからすべてを隠し、コマンドが失敗したときにファブリックが例外をスローしないようにするには、これを試してください。

from __future__ import with_statement
from fabric.api import env,run,hide,settings

env.Host_string = 'username@servernameorip'
env.key_filename = '/path/to/key.pem'

def exec_remote_cmd(cmd):
    with hide('output','running','warnings'), settings(warn_only=True):
        return run(cmd)

その後、次の例に示すように、コマンドの結果を確認できます。

cmd_list = ['ls', 'lss']
for cmd in cmd_list:
    result = exec_remote_cmd(cmd)
    if result.succeeded:
        sys.stdout.write('\n* Command succeeded: '+cmd+'\n')
        sys.stdout.write(result+"\n")
    else:
        sys.stdout.write('\n* Command failed: '+cmd+'\n')
        sys.stdout.write(result+"\n")

これはプログラムのコンソール出力になります(ファブリックからのログメッセージがないことに注意してください)。

 *コマンド成功:ls 
 Desktop espaiorgcats.sql Pictures Public Videos 
 Documents examples.desktop projectes scripts 
 Downloads Music prueba Templates 
 
 *コマンドが失敗しました:lss 
/bin/bash:lss:command not found 
19
cfillol