簡體   English   中英

如何將 kwargs 傳遞給 argparse

[英]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"] == 3args.data["bar"] == "hello"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM