如何在命令行运行python脚本,并且运行时添加一些指定的参数ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, help][, dest])

argparser.ArgumentParser([,description])

文件名:args_test.py,内容如下

import argparse
parser = argparse.ArgumentParser(description='我就是练习一下')
args = parser.parse_args()

运行一下:

C:\everthing>python args_test.py --h
usage: args_test.py [-h]

我就是练习一下

optional arguments:
  -h, --help  show this help message and exit

解释:在description中可以填写python文件的功能的一些描述。

ArgumentParser.add_argument()

  • name or flags
    参数的名称,有必带(positional)的参数,和可选(optional)的参数。

positional参数示例:

import argparse
parser = argparse.ArgumentParser(description='将输入的字符串的首字母变成大写')
parser.add_argument('capital', help='将首字母大写')
args = parser.parse_args()
print(args.capital.capitalize())
print(type(args.capital))

运行下:

C:\everthing>python args_test.py --h
usage: args_test.py [-h] capital

将输入的字符串的首字母变成大写

positional arguments:
  capital     将首字母大写

optional arguments:
  -h, --help  show this help message and exit

C:\everthing>python args_test.py
usage: args_test.py [-h] capital
args_test.py: error: the following arguments are required: capital

C:\everthing>python args_test.py hello
Hello
<class 'str'>

C:\everthing>python args_test.py 2
2
<class 'str'>

解释:python去执行python文件时,带的参数(hello或2)保存在了parser.parse_args().capital中,并且默认将参数处理成str类型

optinal参数示例:

import argparse
parser = argparse.ArgumentParser(description='log级别')
parser.add_argument('--log_level', help='show the level of the log')
args = parser.parse_args()
print(args.log_level)
print(type(args.log_level))

运行:

C:\everthing>python args_test.py --help
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

C:\everthing>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

C:\everthing>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

C:\everthing>python args_test.py --log_level 1.0.0
1.0.0
<class 'str'>

解释:在定义optional参数时,需要用–识别,且在使用参数运行python脚本时,需要添加参数的具体名称,且默认类型也是str。

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))

运行:

C:\everthing>python args_test.py --l 1.0.1
1.0.1
<class 'str'>

C:\everthing>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

这是个分界线,加速写~~


  • nargs
    nargs=N(N是int类型),nargs=’*’, nargs=’?’
    某个参数接受的值,nargs定义了值的个数,加了nargs后,接受的值会变成一个list,’?’代表一个值,’*’代表一个或多个值,举例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('capital', default='hello', help='将首字母大写')
args = parser.parse_args()
print(args)
print(args.capital)

运行结果:

C:\everthing>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)

运行结果:

C:everthing>python args_test.py a
Namespace(capital=['a'])
['a']
  • default
    使用场景:一些positional或所有的optional参数没有用到时,可以用default来传入默认值,使用方法:
    看下没有指定default参数时,optional参数的值:
import argparse
parser = argparse.ArgumentParser(description='看看default怎么用的')
parser.add_argument('-l', '--log_level', help='show the level of the log')
args = parser.parse_args()
print(args)
print(args.log_level)

运行下:

C:\everthing>python args_test.py
Namespace(log_level=None)
None

即optional的参数在命令行没有使用时,默认值时None

指定default的值的示例:

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)

运行下:

C:\everthing>python args_test.py
Namespace(capital='hello', log_level='INFO')
Hello
INFO

解释:注意positional的参数,加了nargs=’?’(或者加nargs=’*’也可以)。

  • 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)

运行下:

C:\everthing>python args_test.py
Namespace(capital=False, v=None, val=None)

C:\everthing>python args_test.py --capital -vv --val
Namespace(capital=True, v=2, val=20)

灰常好用的count。

  • dest
    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)

运行下:

C:\everthing>python args_test.py -f 1 -x 2
Namespace(foo_bar='1', x='2')

解释:foo_bar是第一个long option,x是第一个short option

(完)

参考:
https://www.jianshu.com/p/a50aead61319
https://docs.python.org/3/library/argparse.html