argparse 是如何工作的?我被告知要从我正在构建的 psycopg2 连接中“隐藏”密码,以便能够每周自动运行脚本并能够在部门之间共享它。这是询问密码的 psycopg2 脚本的开头:
#Connect to database
conn_string = "host='my_aws_postgresql_database.rds.amazonaws.com' dbname='my_database_name' user='my_username' password='my_password'"
# print the connection string we will use to connect
print ("\"Connecting to database\n ->%s\"" % (conn_string))
现在,我将如何使用 argparse(和 getpass)来隐藏我的密码?我几次发现这个关于这个主题的脚本(我会在让它工作后删除打印语句):
import argparse
import getpass
class Password(argparse.Action):
def __call__(self, parser, namespace, values, option_string):
if values is None:
values = getpass.getpass()
setattr(namespace, self.dest, values)
parser = argparse.ArgumentParser('Test password parser')
parser.add_argument('-p', action=Password, nargs='?', dest='password',
help='Enter your password')
args = parser.parse_args()
print (args.password)
我试图在argparse
代码上方添加代码段#Connect to database
。password
并将第 2 行的部分替换为
conn_string =
"host='my_aws_postgresql_database.rds.amazonaws.com'
dbname='my_database_name'
user='my_username'
password='" + args + "'"
然后我尝试使用python3 my_script_file.py my_password -p
我被要求输入密码的命令运行整个脚本,但这会导致以下错误
usage: Test password parser [-h] [-p [PASSWORD]]
Test password parser: error: unrecognized arguments: my_password
如果我使用python3 my_script_file.py my_password
我会得到同样的错误,但我不必(再次)输入密码。
我接近解决方案了吗?这是这样做的标准方式吗?
问题是我使用python3 my_script_file.py my_password -p
了而不是正确的顺序python3 my_script_file.py -p my_password
,请参阅下面@hpaulj 接受的答案以及对该答案的评论。