Thay vì sửa đổi/ghi đè Vải, bạn có thể thay thế thiết bị xuất chuẩn (hoặc bất kỳ iostream) nào bằng bộ lọc.
Dưới đây là ví dụ về giá trị ghi đè để kiểm duyệt mật khẩu cụ thể. Nó lấy mật khẩu từ biến số env.password
của Fabric, set by the -I
argument. Lưu ý rằng bạn có thể làm điều tương tự với biểu thức chính quy, để bạn không phải chỉ định mật khẩu trong bộ lọc.
Tôi cũng nên đề cập, đây không phải là mã hiệu quả nhất trên thế giới, nhưng nếu bạn đang sử dụng vải, bạn có thể dán một vài thứ lại với nhau và quan tâm nhiều hơn đến khả năng quản lý hơn tốc độ.
#!/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
Khi chạy:
fab -I can_you_see_the_password
Initial value for env.password:
này sẽ sản xuất:
Hello there
My password is [[TOP SECRET]]
Đó là một ý tưởng khá hay! –
Tôi tưởng tượng rằng nếu OP không muốn mật khẩu của mình trong các bản ghi thiết bị đầu cuối của mình thì có lẽ anh ta không muốn mật khẩu của mình đang ngồi trong một tệp '.py'. –
ông cũng có thể sử dụng một regex trên dấu nhắc mật khẩu để kết thúc của dòng .. bạn có một ý tưởng tốt hơn hoặc chỉ để nitpick? :) – synthesizerpatel