通过 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=[<_io.TextIOWrapper name='dict.json' mode='r' encoding='UTF-8'>])
对于nargs=2
,“a a”输入是正确的。查看错误消息中的用法行。
如果你想要myprog.py jsonfile astr
,省略nargs
参数。
当我写 nargs = 1 时问题解决了。我认为 nargs 是参数的顺序,但显然我错了。非常感谢您的帮助!以上是关于通过 argparse 传递 JSON 字典和一个 char的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Post 方法使用 JSON 模型将 JSON 字典作为参数传递?
如何通过批处理文件执行 Python 代码并传递参数 - 使用 argparse