繁体   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