Вместо изменения / переопределения Fabric вы можете заменить стандартный вывод (или любой iostream) на фильтр.
Вот пример переопределения стандартного вывода для цензуры определенного пароля.Он получает пароль из переменной env.password
Fabric, установленной аргументом -I
.Обратите внимание, что вы можете сделать то же самое с регулярным выражением, так что вам не нужно будет указывать пароль в фильтре.
Я также должен отметить, что это не самый эффективный код в мире, но если вы используете ткань, скорее всего, вы склеиваете пару вещей и больше заботитесь об управляемости, чем о скорости.
#!/usr/bin/python
import sys
import string
from fabric.api import *
from fabric.tasks import *
from fabric.contrib import *
class StreamFilter(object):
def __init__(self, filter, stream):
self.stream = stream
self.filter = filter
def write(self,data):
data = data.replace(self.filter, '[[TOP SECRET]]')
self.stream.write(data)
self.stream.flush()
def flush(self):
self.stream.flush()
@task
def can_you_see_the_password():
sys.stdout = StreamFilter(env.password, sys.stdout)
print 'Hello there'
print 'My password is %s' % env.password
При запуске:
fab -I can_you_see_the_password
Initial value for env.password:
это приведет к
Hello there
My password is [[TOP SECRET]]