2016-07-07 21 views
-1

我想在命令行上傳遞字典。下面的代碼失敗:強制用戶在命令行上傳遞字典

import json 
import argparse 

parser = argparse.ArgumentParser(description='Test Arg Parse') 
parser.add_argument('-d', '--dict', type=dict, required=False) 

variables = vars(parser.parse_args()) 
print json.dumps(variables) 

當我運行程序,它會引發以下錯誤:

C:\KTLO\bin>python TestProg.py -d "{'a':'b'}" 
usage: TestProg.py [-h] [-d DICT] 
TestProg.py: error: argument -d/--dict: invalid dict value: "{'a':'b'}" 

編輯1:指定 'json.loads' 或 '字典' 不改變輸出並仍然會拋出錯誤。

+2

您需要將'json.loads'作爲'type',這與'default'和'dict'不接受字典的字符串表示形式是沒有任何意義的。 – jonrsharpe

+1

@Siva在接受的答案中,它顯示了一個黑客,它實際上不起作用。 – psychoCoder

+1

將'json.loads'作爲'type'傳遞不是黑客行爲,它確實有效。 – jonrsharpe

回答

0

嘗試

python TestProg.py -d '{"a":"b"}' 

單引號是沒有有效的JSON。

+0

'C:\ KTLO \ bin> python TestProg.py -d'{「a」:「b」}' 用法:TestProg.py [-h] [-d DICT] TestProg.py:error :參數-d/- 字典:無效的字典值:「'{a:b}'」 '不起作用 – psychoCoder

+1

我想你的''default =''應該是''type ='',參見http ://stackoverflow.com/a/18609361/893159 – allo

+0

@psychoCoder請注意,您引用的是整個對象,而不是其中的鍵和值。 – jonrsharpe