Подтвердить что ты не робот

Легкий способ подавления выхода ткани?

Я запускаю команду на удаленной машине:

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

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

4b9b3361

Ответ 1

Похоже, что Управление выходом - это то, что вы ищете.

Чтобы скрыть вывод из консоли, попробуйте что-то вроде этого:

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

Ответ 2

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

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)

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

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