Anstatt Fabric zu ändern/zu überschreiben, können Sie stdout (oder einen beliebigen Iostream) durch einen Filter ersetzen.
Hier ist ein Beispiel für das Überschreiben von stdout, um ein bestimmtes Passwort zu zensieren. Es erhält das Passwort von Fabric's env.password
Variable, set by the -I
argument. Beachten Sie, dass Sie dasselbe mit einem regulären Ausdruck tun könnten, sodass Sie das Kennwort nicht im Filter angeben müssen.
Ich sollte auch erwähnen, das ist nicht der effizienteste Code der Welt, aber wenn Sie Stoff verwenden, kleben Sie wahrscheinlich ein paar Dinge zusammen und kümmern sich mehr um Verwaltbarkeit als Geschwindigkeit.
#!/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
Wenn Lauf:
fab -I can_you_see_the_password
Initial value for env.password:
diese produzieren:
Hello there
My password is [[TOP SECRET]]
Das ist eine ziemlich gute Idee! –
Ich stelle mir vor, dass, wenn das OP sein Passwort in seinen Terminalprotokollen nicht will, er wahrscheinlich nicht möchte, dass sein Passwort in einer '.py' Datei herumsteht. –
er könnte auch eine Regex auf die Passwortabfrage bis zum Ende der Zeile verwenden .. hast du eine bessere Idee oder einfach nur nitpick? :) – synthesizerpatel