自定义python命令(python命令行之argparser)

目录

1、argparser.ArgumentParser([,description])

2、ArgumentParser.add_argument():

3、args = parser.parse_args():

4、optional之short options :我看的论文里面用的这个

5、nargs 

6、default 使用场景:

7、action 

8、灰常好用的count



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

猜你喜欢

转载自blog.csdn.net/abc13526222160/article/details/84632205