2012-02-26 1 views
24

Я бег команды на удаленной машине:Простой способ подавить выход ткани?

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

Я хотел бы, чтобы захватить выход, но не все это выводится на экран. Какой самый простой способ сделать это?

ответ

31

Похоже, что раздел 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') 

Belows является результаты выборки:

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 
17

Попробуйте это, если вы хотите, чтобы скрыть все из журнала и избежать ткани исключая исключения при сбое команды:

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

env.host_string = '[email protected]' 
env.key_filename = '/path/to/key.pem' 

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

После этого вы можете проверить команды resu л, как показано в этом примере:

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") 

Это будет выход консоли программы (заметим, что существует не войти сообщений из ткани):

 
* Command succeeded: ls 
Desktop espaiorgcats.sql Pictures Public  Videos 
Documents examples.desktop projectes scripts 
Downloads Music   prueba Templates 

* Command failed: lss 
/bin/bash: lss: command not found 

 Смежные вопросы

  • Нет связанных вопросов^_^