eur*_*i10 3 python python-click
下面的代码段会提示输入用户名和密码,默认为env变量.
现在虽然密码输入在键入时很好地隐藏了,但我也希望隐藏括号之间的默认值,到目前为止,如果我输入此密码,则密码默认为明确1234:
? export PASSWORD=1234
? python test.py
? User [myuser]: you can see here
? Password [1234]:
user you can see here
password you cant see
import os
import click
@click.command()
@click.option('--user', prompt=True, default=lambda: os.environ.get('USER', ''))
@click.option('--password', prompt=True, default=lambda: os.environ.get('PASSWORD', ''), hide_input=True)
def test(user, password):
print('user {}'.format(user))
print('password {}'.format(password))
print(password)
if __name__ == '__main__':
test()
Run Code Online (Sandbox Code Playgroud)
您可以创建一个其字符串表示形式隐藏密码的类:
class HiddenPassword(object):
def __init__(self, password=''):
self.password = password
def __str__(self):
return '*' * len(self.password)
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,您只需要检查是否使用了此类并更新密码:
@click.command()
@click.option('--user',
prompt=True,
default=lambda: os.environ.get('USER', ''))
@click.option('--password',
prompt=True,
default=lambda: HiddenPassword(os.environ.get('PASSWORD', '')),
hide_input=True)
def test(user, password):
print('user: {}'.format(user))
if isinstance(password, HiddenPassword):
password = password.password
print('password: {}'.format(password))
Run Code Online (Sandbox Code Playgroud)
在行动:
$ PASSWORD=foobar python test.py
User [mVChr]:
Password [******]:
user: mVChr
password: foobar
$ PASSWORD=foobar python test.py
User [mVChr]: dan
Password [******]:
user: dan
password: user-entered-pw
Run Code Online (Sandbox Code Playgroud)