J'exécute une commande sur la machine distante:
remote_output = run('mysqldump --no-data --user=username --password={0} database'.format(password))
Je voudrais capturer la sortie, mais ne pas l'avoir tout imprimé à l'écran. Quelle est la façon la plus simple de procéder?
Cela ressemble à Gestion de la sortie section est ce que vous recherchez.
Pour masquer la sortie de la console, essayez quelque chose comme ceci:
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')
Voici les résultats de l'échantillon:
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
Essayez ceci si vous souhaitez tout masquer dans le journal et éviter que la structure ne lance des exceptions lorsque la commande échoue:
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)
Après cela, vous pouvez vérifier le résultat des commandes comme indiqué dans cet exemple:
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")
Ce sera la sortie console du programme (notez qu'il n'y a pas de messages de log de la structure):
* Commande réussie: ls Desktop espaiorgcats.sql Images Vidéos publiques Documents examples.desktop projectes scripts Téléchargements Music Prueba Templates * La commande a échoué: lss /Bin/bash: lss: commande introuvable