我环顾四周,但找不到任何东西。
基本上我想知道是否可以将 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()
我很确定这不是处理此问题的最佳方法,但是,需要为密码提供一个命令行选项......是否是最佳实践。
谢谢。
最佳答案
我想我可能找到了更好的方法来做到这一点。如何使用这样的自定义操作:
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()
关于Python:将 getpass 与 argparse 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27921629/