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的附加參數。 –