MHi*_*bin 10 python passwords arguments prompt
我环顾四周,但找不到任何东西.
基本上我想知道是否可以使用getpass.getpass()argparse.
目前我有以下作为解决方法,我只是想知道是否有更好的方法:
import argparse
import getpass
parser = argparse.ArgumentParser(description="Some description")
parser.add_argument('-p', metavar="password", default="foobarblah123", help="password for user (default to prompt user)")
...
parsed_args = parser.parse_args()
args = vars(parsed_args)
user_pass = args['p']
if user_pass == "foobarblah123":
user_pass = getpass.getpass()
Run Code Online (Sandbox Code Playgroud)
我很确定这不是处理此问题的最佳方法,但是,需要为密码设置命令行选项...最佳实践与否.
谢谢.
Rar*_*ina 15
我想我可能找到了一个更好的方法来做到这一点.如何使用这样的自定义Action:
import argparse
import getpass
class PasswordPromptAction(argparse.Action):
def __init__(self,
option_strings,
dest=None,
nargs=0,
default=None,
required=False,
type=None,
metavar=None,
help=None):
super(PasswordPromptAction, self).__init__(
option_strings=option_strings,
dest=dest,
nargs=nargs,
default=default,
required=required,
metavar=metavar,
type=type,
help=help)
def __call__(self, parser, args, values, option_string=None):
password = getpass.getpass()
setattr(args, self.dest, password)
parser.add_argument('-u', dest='user', type=str, required=True)
parser.add_argument('-p', dest='password', action=PasswordPromptAction, type=str, required=True)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
环顾四周,没有找到足够的解决方案.这就是我想出的.
from argparse import ArgumentParser
from getpass import getpass
def main():
parser = ArgumentParser(description="arg parser hidden password input.")
parser.add_argument('-sp', '--secure_password', action='store_true', dest='password',
help='hidden password prompt')
args=parser.parse_args()
if args.password:
password = getpass()
print(password)
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
显然你想删除print(password),只是添加它来验证它的工作原理.
这是我想到的提示输入最小密码的内容(Python 3代码):
import argparse
import getpass
class Password:
DEFAULT = 'Prompt if not specified'
def __init__(self, value):
if value == self.DEFAULT:
value = getpass.getpass('LDAP Password: ')
self.value = value
def __str__(self):
return self.value
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-u', '--username', help='Specify username',
default=getpass.getuser())
parser.add_argument('-p', '--password', type=Password, help='Specify password',
default=Password.DEFAULT)
args = parser.parse_args()
print(args.username, args.password)
Run Code Online (Sandbox Code Playgroud)
用法示例:
$ python ~/Desktop/example.py -h
usage: example.py [-h] [-u USERNAME] [-p PASSWORD]
optional arguments:
-h, --help show this help message and exit
-u USERNAME, --username USERNAME
Specify username (default: gavinr)
-p PASSWORD, --password PASSWORD
Specify password (default: Prompt if not specified)
$ python ~/Desktop/example.py -p foo
gavinr foo
$ python ~/Desktop/example.py
LDAP Password:
gavinr foo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8698 次 |
| 最近记录: |