Используя псевдоним может быть экономящий время
alias myDir = "cd /this/is/a/long/directory; pwd"
Я смог диагностировать проблему, когда добавил в объявление capture = False:
local('git rm fabfile.py', capture=False)
local('git add settings.py', capture=False)
Это позволило отобразить ошибку более подробно.
Очевидно, разработчик Fabric будет чтобы вернуть поведение local
к режиму отсутствия захвата по умолчанию в 1.0.
Это проблема, связанная с питоном, аналогичная описанной в этой ветке ?
Основная проблема заключается в том, что
stdout
/stderr
захват выполняется для каждого запуска / sudo, а не для каждой задачи.Было бы замечательно, если бы вы могли объяснить мне, как я могу собирать вывод и ошибку , изменив только файл с именем
fabfile_runner.py
.
В идеале сама задача фабрики могла бы быть неизменной, это позволило бы загрузить на фабрику тот же файл, который вы тестировали вручную.Проверьте исходный код Fabric и загляните в папку «tests», а именно в tests / utils.py. Он содержит единственный декоратор,
@mock_streams
, который может оборачивать функцию (любую функцию в любом коде Python - это не зависит от Fabric, как я уже упоминал) и перенаправлятьsys.stdout
и / илиsys.stderr
для захвата / изучения.Он предназначен для использования с функциями, будучи декоратором, поэтому вы можете использовать его напрямую, изменив свой
fabfile_runner.py
вот так:
fabfile_runner.py
from StringIO import StringIO
import sys
from test_fabfile import hello_world
def execute(task):
output = StringIO()
error = StringIO()
sys.stdout = output
sys.stderr = error
task()
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
return (output.getvalue(), error.getvalue())
output, error = execute(hello_world)
print "output : %s" %output
print "error : %s" %error