当前位置:  开发笔记 > 编程语言 > 正文

打印命令时如何在结构中隐藏密码?

如何解决《打印命令时如何在结构中隐藏密码?》经验,为你挑选了1个好方法。

说我fabfile.py看起来像这样:

def setup():                                
    pwd = getpass('mysql password: ')
    run('mysql -umoo -p%s something' % pwd)

这个输出是:

[host] run: mysql -umoo -pTheActualPassword

有没有办法让输出看起来像这样?

[host] run: mysql -umoo -p*******

注意:这不是一个mysql问题!



1> synthesizerp..:

您可以使用过滤器替换stdout(或任何iostream),而不是修改/重写Fabric.

这是一个覆盖stdout来审查特定密码的示例.它从Fabric的env.password变量获取密码,由-I参数设置.请注意,您可以使用正则表达式执行相同的操作,这样您就不必在过滤器中指定密码.

I should also mention, this isn't the most efficient code in the world, but if you're using fabric you're likely gluing a couple things together and care more about manageability than speed.

#!/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 

When run:

fab -I can_you_see_the_password
Initial value for env.password:

this will produce:

Hello there
My password is [[TOP SECRET]]

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有