目录
1、argparser.ArgumentParser([,description])
2、ArgumentParser.add_argument():
4、optional之short options :我看的论文里面用的这个
python中使用命令行选项:
例如我们需要一个convert.py脚本。它的作用是处理一个文件,并将处理后的结果输出到另一个文件中。
要求该脚本满足以下条件:
1.通过-i -o选项来区别参数是输入文件还是输出文件:
>>> python convert.py -i inputfile -o outputfile
2.当不知道convert.py需要哪些参数时,用-h打印出帮助信息
>>> python convert.py -h
如何在命令行运行python脚本,并且运行时添加一些指定的参数
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, help][, dest])
1、argparser.ArgumentParser([,description])
表示的意思是: 创建ArgumentParser对象
文件名:args_test.py 内容如下:
import argparse parser = argparse.ArgumentParser(description='我就是练习一下') args = parser.parse_args()
运行一下:
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py -h usage: args_test.py [-h] 我就是练习一下 optional arguments: -h, --help show this help message and exit (tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$
注意: 在description中可以填写python文件的功能的一些描述。
2、ArgumentParser.add_argument():
表示的意思是:调用add_argument()向ArgumentParser对象添加命令行参数信息,这些信息告诉ArgumentParser对象如何处理命令行参数。
- name or flags :参数的名称,有必带(positional)必选参数,和可选(optional)的参数。
3、args = parser.parse_args():
表示的意思是:通过调用parse_args()来解析ArgumentParser对象中保存的命令行参数:将命令行参数解析成相应的数据类型并采取相应的动作,它返回一个Namespace
对象。
(1)positional参数示例:文件名:args_test.py
import argparse parser = argparse.ArgumentParser(description='将输入的字符串的首字母变成大写') parser.add_argument('capital', help='将首字母大写') #就是这个capital args = parser.parse_args() print(args.capital.capitalize()) print(type(args.capital))
运行下:
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py -h usage: args_test.py [-h] capital 将输入的字符串的首字母变成大写 positional arguments: capital 将首字母大写 optional arguments: -h, --help show this help message and exit
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py zhang Zhang <class 'str'>
解释:python去执行python文件时,带的参数(zhang)保存在了parser.parse_args().capital中,并且默认将参数处理成str类型
(2)optional可选参数示例:文件名:args_test.py
import argparse parser = argparse.ArgumentParser(description='log级别') parser.add_argument('--log_level', help='show the level of the log') #就是这个的--log_level args = parser.parse_args() print(args.log_level) print(type(args.log_level))
运行下:
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py --h usage: args_test.py [-h] [--log_level LOG_LEVEL] log级别 optional arguments: -h, --help show this help message and exit --log_level LOG_LEVEL show the level of the log
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py 1.0.0 usage: args_test.py [-h] [--log_level LOG_LEVEL] args_test.py: error: unrecognized arguments: 1.0.0 (tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$
上面这个没有添加名称
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py -log_level 1.0.0 usage: args_test.py [-h] [--log_level LOG_LEVEL] args_test.py: error: unrecognized arguments: -log_level 1.0.0
上面这个名称添加的不多
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py --log_level 1.0.0 1.0.0 <class 'str'>
解释:在定义optional参数时,需要用–识别,且在使用参数运行python脚本时,需要添加参数的具体名称,且默认类型也是str
4、optional之short options :我看的论文里面用的这个
optional参数由于在使用时需要写参数名称,可以用简短的命令来代替:
import argparse parser = argparse.ArgumentParser(description='log级别') parser.add_argument('-l', '--log_level', help='show the level of the log') args = parser.parse_args() print(args.log_level) print(type(args.log_level))
运行下:
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py --h usage: args_test.py [-h] [-l LOG_LEVEL] log级别 optional arguments: -h, --help show this help message and exit -l LOG_LEVEL, --log_level LOG_LEVEL show the level of the log
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py --l 1.0.1 1.0.1 <class 'str'>
5、nargs
nargs=N(N是int类型),nargs=’*’, nargs=’?’
某个参数接受的值,nargs定义了值的个数,加了nargs后,接受的值会变成一个list,’?’代表一个值,’*’代表一个或多个值,举例:
无nargs
import argparse parser = argparse.ArgumentParser() parser.add_argument('capital', default='hello', help='将首字母大写') args = parser.parse_args() print(args) print(args.capital)
运行下:
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py a Namespace(capital='a') a
加入nargs,并运行:
import argparse parser = argparse.ArgumentParser() parser.add_argument('capital', default='hello', nargs=1, help='将首字母大写') args = parser.parse_args() print(args) print(args.capital)
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py a Namespace(capital=['a']) ['a']
6、default 使用场景:
一些positional或所有的optional参数没有用到时,可以用default来传入默认值,使用方法:
看下没有指定default参数时,optional参数的值:
import argparse parser = argparse.ArgumentParser(description='看看default怎么用的') parser.add_argument('capital', help='将首字母大写', default='hello', nargs='?') parser.add_argument('-l', '--log_level', default='INFO', help='show the level of the log') args = parser.parse_args() print(args) print(args.capital.capitalize()) print(args.log_level)
运行下:
(tf1.8) zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py Namespace(capital='hello', log_level='INFO') Hello INFO
解释:注意positional的参数,加了nargs=’?’(或者加nargs=’*’也可以)。
7、action
这个参数炒鸡好用,是针对optional的参数。对positional参数没啥卵用。一言以概之,命令行中存在某个optional参数时,这个参数的值就为True(或False或常量或其他值),没有出现这个参数时,值就为False(或True或None)
action有好几种,简单看一下这几个方法
- store_true
- store_false
- count
- store_const
import argparse parser = argparse.ArgumentParser(description='看看nargs怎么用的') parser.add_argument('--capital', action='store_true', help='看看store_true') parser.add_argument('-v', '-verbose', action='count', help='看看count') parser.add_argument('--val', action='store_const', const=20, help='看看store_const') args = parser.parse_args() print(args)
运行下:
zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py Namespace(capital=False, v=None, val=None)
8、灰常好用的count
dest定义了parse_args()中保存命令行中值的参数名,对于positional的参数,参数名取的是add_argument()中的第一个,一般也不需要有多个,因为在使用命令行时,positional类型的参数名是不出现在命令行中的; 对于optional类型的参数更有意义些,为书写方便,一个参数可以有多个参数名,比如上面的-l就是一个很好的示例
parser.add_argument('-l', '--log_level', help='show the level of the log')
选择参数名的规则:long option>short option,(long option的标志是–,short option的标志是-)。若只有short option或只有long option或有多个long option,则选择add_argument()中位置靠前的那一个,示例如下:
import argparse parser = argparse.ArgumentParser() parser.add_argument('-f', '--foo-bar', '--fooooooo') parser.add_argument('-x', '-y') args = parser.parse_args() print(args)
运行下
zhangkf@Ubuntu2:~/PycharmProjects$ python args_test.py -f 1 -x 2 Namespace(foo_bar='1', x='2')
:
参考 : https://blog.csdn.net/u013946404/article/details/78188266#4argumentparser%E5%AF%B9%E8%B1%A1(重要详细看参数说明后面的)
https://blog.csdn.net/u010895119/article/details/78960740
https://blog.csdn.net/u010895119/article/details/78960740
https://blog.csdn.net/abc13526222160/article/details/84583800