2016-02-16 4 views
1

Моя программа запускает команду на удаленном хосте, а некоторые секретные параметры передаются в качестве командной строки в функцию теневого запуска. Но если команда возвращает ненулевой статус, она печатает полную команду на stderr.Подавление прерванных сообщений в ткани python с не нулевым статусом выхода

Я попытался код ниже

class FabricException(Exception): 
    def __init__(self, message): 
     self.message = message 
     print self.message 

env.abort_exception = FabricException 

try: 
    execute(fabric_run, intepreter=intepreter, script_name=script_name, command_line=command_line, hosts=hosts, sudo=sudo, warn_only=warn_only) 
except FabricException("Something"): 
    sys.exit(1) 

Но в любой момент времени, если программа возвращает не нулевое состояние выхода, я получаю отслеживающий напечатанные на консоль, которые я хочу, чтобы избежать. В любом случае, я могу добиться этого в ткани? Я хочу, чтобы это работало, когда warn_only имеет значение True, а также warning_only False

ответ

0

Вы можете подавлять сообщения, используя контекстные_процессоры, когда warn_only = True. С warn_only = False оно, похоже, отображает ошибки даже при использовании context_managers, чтобы скрыть все. Тихий() context_manager - это псевдоним настроек (скрыть («все»), warn_only = True). Смотрите пример ниже:

>>> from fabric.api import run, execute 
>>> from fabric.context_managers import quiet 
>>> def task_a(): 
... return run('sdfsdgfsd') 
... 
>>> with quiet(): 
... a = execute(task_a,hosts=['testhost']) 
... 
>>> a 
{'testhost': '/bin/bash: sdfsdgfsd: command not found'} 

С умолчанию warn_only = False:

>>> from fabric.context_managers import hide 
>>> def task_a(): 
... return run('sdfsdgfsd') 
... 
>>> with hide('everything'): 
... a = execute(task_a,hosts=['testhost']) 
... 

Fatal error: run() received nonzero return code 127 while executing! 

Requested: sdfsdgfsd 
Executed: /bin/bash -l -c "sdfsdgfsd" 

============================================================================================= Standard output ============================================================================================= 

/bin/bash: sdfsdgfsd: command not found 

============================================================================================================================================================================================================ 

Aborting. 
run() received nonzero return code 127 while executing! 

Requested: sdfsdgfsd 
Executed: /bin/bash -l -c "sdfsdgfsd" 

============================================================================================= Standard output ============================================================================================= 

/bin/bash: sdfsdgfsd: command not found 

=========================================================================================================================================================================================================== 
+0

Когда 'warn_only = false', я все еще могу видеть ошибки, напечатанные на STDERR, которые я хочу избежать. В случае, если я передал некоторые секреты/пароли в качестве командной строки, он отображается в консоли, которая небезопасна. –