argparse如何工作?我被告知要从我正在构建的psycopg2连接'隐藏'密码,以便能够每周自动运行脚本并能够在部门之间共享。这是psycopg2脚本的开始,其中的密码是问:如何在实际脚本中使用argparse
#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)
我试图添加#Connect to database
代码上面的片段。来代替在第2行password
部分与
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以下的接受答案和对该答案的评论。
密码normaly来自文件%APPDATA%\上 – Drako
你似乎对你的方式,你只是通过强制用户输入其每个“隐藏”密码Windows漫游\ PostgreSQL的\ pgpass.conf他们使用该程序的时间,而不是硬编码。当涉及到你的错误时,你需要指定你想要的参数,而不是使用整个列表。
'password ='“+ args +”'“'应该是'password ='”+ args.password +“'”' –
我不明白你要做什么。 add_argument(“echo”)只是添加了一个名为echo的附加参数。 –