संशोधित/कपड़ा अधिभावी के बजाय, आप एक फिल्टर के साथ stdout (या किसी भी iostream) की जगह सकता है।
यहां एक विशिष्ट पासवर्ड सेंसर करने के लिए स्ट्राउट ओवरराइड करने का एक उदाहरण दिया गया है। यह फैब्रिक के env.password
चर, set by the -I
argument से पासवर्ड प्राप्त करता है। ध्यान दें कि आप नियमित अभिव्यक्ति के साथ एक ही चीज़ कर सकते हैं, ताकि आपको फ़िल्टर में पासवर्ड निर्दिष्ट न करना पड़े।
मैं भी उल्लेख करना चाहिए, इस दुनिया में सबसे कुशल कोड नहीं है, लेकिन अगर आप कपड़े का उपयोग कर रहे आप की संभावना एक साथ नीचे दिए कुछ चिपकाने और गति की तुलना में प्रबंधन क्षमता के बारे में अधिक परवाह कर रहे हैं।
#!/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]]
यह एक बहुत अच्छा विचार है! –
मुझे कल्पना है कि यदि ओपी अपने टर्मिनल लॉग में अपना पासवर्ड नहीं चाहता है तो शायद वह नहीं चाहता कि उसका पासवर्ड '.py' फ़ाइल में बैठे। –
वह लाइन के अंत में पासवर्ड प्रॉम्प्ट पर रेगेक्स का भी उपयोग कर सकता है .. क्या आपके पास बेहतर विचार है या बस नाइटपिक करना पसंद है? :) – synthesizerpatel