[英]How to pass kwargs to argparse
我需要通過命令行將字典傳遞給 python 模塊。 我還沒有找到讓 Python 合作的方法。 以下是我想要完成的一個非常簡化的示例。 這會產生以下錯誤TypeError: _get_positional_kwargs() missing 1 required positional argument: 'dest'
。 將dest
參數添加到 add_argument 行會導致TypeError: __init__() got an unexpected keyword argument 'kwargs'
,這表明 argparse 可能根本不接受字典作為參數的可悲可能性。 泡菜文件真的是從命令行調用來回傳遞字典的唯一選擇嗎?
def run(**kwargs):
for i in kwargs.items():
print(f'{i}: {kwargs[i]}')
# ...some code to manipulate the dictionary
return kwargs
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Test script")
parser.add_argument(kwargs='**', description='A dictionary to be manipulated and returned')
args = parser.parse_args()
x = run(args)
pass
附加信息- 我知道我可以使用包含空格分隔參數的命令行將列表傳遞給*nargs
參數,但我需要對字典執行類似的操作。
更新 - 有效:根據@chepner的有用輸入,我能夠讓它與他在回答中提到的 json 解決方案一起使用。 在我的 Windows 平台上,我確實必須從字典字符串中刪除所有空格,並且最終命令行字符串中需要轉義字符。
{\\"this\\":1,\\"is\\":2,\\"a\\":5,\\"dictionary\\":7}
參數是字符串,句號。 您要傳遞的是一個包含編碼dict
的字符串,例如使用 JSON。
import argparse
import json
parser = argparse.ArgumentParser()
parser.add_argument('data', type=json.loads)
args = parser.parse_args()
如果你用類似的東西運行你的腳本
myscript '{"foo": 3, "bar": "hello"}'
然后args.data["foo"] == 3
和args.data["bar"] == "hello"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.