python获取命令⾏输⼊变成json_python获取json格式的命令⾏
参数
前⼀段⼯作中⼀个python项⽬有⼀个⼩需求,要通过命令⾏向程序传递json格式的参数。这⾥分享⼀下实现的⼼得,主要是两部分:
1.使⽤argparse来获取命令⾏参数:
argparse是是Python标准库中推荐使⽤的编写命令⾏程序的⼯具
通过⼀个例⼦来解释⼀下argparse的基本使⽤:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()python怎么读取json文件
设置⼀个解析器
使⽤argparse的第⼀步就是创建⼀个解析器对象,并告诉它将会有些什么参数。那么当你的程序运⾏时,该解析器就可以⽤于处理命令⾏参数。
解析器类是 ArgumentParser 。构造⽅法接收⼏个参数来设置⽤于程序帮助⽂本的描述信息以及其他全局的⾏为或设置。开始的这部分代码就是设置⼀个解析器:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
定义参数
argparse是⼀个全⾯的参数处理库。参数可以触发不同的动作,动作由 add_argument() ⽅法的 action
参数指定。 ⽀持的动作包括保存参数(逐个地,或者作为列表的⼀部分),当解析到某参数时保存⼀个常量值(包括对布尔开关真/假值的特殊处理),统计某个参数出现的次数,以及调⽤⼀个回调函数。
默认的动作是保存参数值。在这种情况下,如果提供⼀个类型,那么在存储之前会先把该参数值转换成该类型。如果提供 dest 参数,参数值就保存为命令⾏参数解析时返回的命名空间对象中名为该 dest 参数值的⼀个属性。
parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator')
解析⼀个命令⾏
定义了所有参数之后,你就可以给 parse_args() 传递⼀组参数字符串来解析命令⾏。默认情况下,参数是从 sys.argv[1:] 中获取,但你也可以传递⾃⼰的参数列表。选项是使⽤GNU/POSIX语法来处理的,所以在序列中选项和参数值可以混合。
parse_args() 的返回值是⼀个命名空间,包含传递给命令的参数。该对象将参数保存其属性,因此如果你的参数 dest 是 "myoption",那么你就可以ption 来访问该值。
args = parser.parse_args()
这⾥是简单的介绍⼀下如何快速的使⽤argparse,如果想要查看更详细的使⽤⽅法可以查看官⽅⽂档
2.向argparse传⼀个json格式的参数
argparse的⽂档中说可以⽀持所有的格式作为参数来传递:
Any object that supports the in operator can be passed as the choices value, so dict objects, set objects, custom containers, etc. are all supported.
但是,但是如果把add_argument设成dict,是会报错的。所以这⾥的传递任意类型,其实是以str传递,然后再转换成任意的类型。
完成传⼊json变量的⽬的的代码:
parser.add_argument('-m', '--my-dict', type=str)
args = parser.parse_args()
import json
my_dictionary = json._dict)
这样就是先以str来传⼊参数,然后再再⾃⾏转换。当然这样不够便捷。
更⽅便的⽅式是改进add_argument的type,直接把type类型变为json转换。代码:
import json
parser.add_argument('-d', '--my-dict', type=json.loads)
args = parse.parse_args()
这样就可以直接传递json的参数了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论