通过 argparse 传递 JSON 字典和一个 char

Posted

技术标签:

【中文标题】通过 argparse 传递 JSON 字典和一个 char【英文标题】:pass JSON dictionary and a char with argparse 【发布时间】:2017-12-11 00:46:16 【问题描述】:

我正在尝试将两个参数传递给 python,一个只读 JSON 文件和一个 char 一起。事实上,我想要两个位置的参数,但我也做不到,所以让 char 一个可选。最后我会读字典,char 是我的关键。

当我像下面这样尝试时,第二个参数作为 None 传递。我不明白为什么它是空的。你有什么主意吗?

非常感谢!

python3 myProg.py dict.json -a

import json
import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser(description = 'program')
    parser.add_argument('json', nargs = 1, type = argparse.FileType('r'))
    parser.add_argument('-args', nargs ="?")

    arguments = parser.parse_args()
    dictionary = json.load(arguments.json[0])
    arg_start = arguments.args

收到此错误:

命名空间(args=None, json=[<_io.textiowrapper name="dict.json" mode="r" encoding="UTF-8">])

【问题讨论】:

【参考方案1】:

您的json 文件似乎正常。如果您省略了nargs=1,您可以使用:

dictionary = json.load(arguments.json)

-args 是一个nargs='?'。这意味着可以省略参数。如果根本不使用,它的值将是 Actions default(当前为 None)。

如果仅提供-a,则该值是操作的const(也为None)。

如果提供为-a foo,它将设置该字符串。

如果您将 argument 定义为位置纯“args”(不带 -),那么它将接受 json 文件名之后的下一个字符串。

【讨论】:

我想传递两个位置参数,没有任何可选参数。当我像下面这样设置 add_argument 时,parser.add_argument('args', nargs =2) 我收到此错误消息:需要以下参数:args 我仍然不明白如何传递两个参数 python3 myProg.py dict.json a 这给出了“错误:需要以下参数:args”python3 myProg.py dict.json a a 给出两个 a s。 Namespace(args=['a', 'a'], json=[&lt;_io.TextIOWrapper name='dict.json' mode='r' encoding='UTF-8'&gt;]) 对于nargs=2,“a a”输入是正确的。查看错误消息中的用法行。 如果你想要myprog.py jsonfile astr,省略nargs参数。 当我写 nargs = 1 时问题解决了。我认为 nargs 是参数的顺序,但显然我错了。非常感谢您的帮助!

以上是关于通过 argparse 传递 JSON 字典和一个 char的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Post 方法使用 JSON 模型将 JSON 字典作为参数传递?

字符串内的 JSON 的 argparse

如何通过批处理文件执行 Python 代码并传递参数 - 使用 argparse

使用 argparse 和 python 接受字典作为参数 [重复]

Python将字典转换为argparse

使用 Argparse 进行字典