首页 > 编程知识 正文

python main,qpython

时间:2023-05-03 12:59:52 阅读:42751 作者:1097

介绍

在终端上运行python程序时,会出现需要参数的需求。 虽然您可以自己分析在sys.argv中传递的参数,但python可以更好地为argparse模块提供ArgumentParser类。

我们可以通过实例化ArgumentParser并调用parse_args方法来使用它。

接下来是简单的栗子

fromargparseimportargumentparser

导入系统

parser=ArgumentParser (

parser.parse _ args (sys.argv [ 1: ]

将--help或--h参数添加到终端可执行文件中可获得说明。 很帅吗?

d : (桌面pythonargparselearn.py-- help

usage: argparseLearn.py [-h]

可选协议:

-h,--helpshowthishelpmessageandexit

当然,作为一个了不起的python程序创作者,我们提供一个--help参数肯定是不够的。 可以使用add_argument方法添加参数。 foo参数又登场了

parser.add_argument('--foo ',help='foo help ' )

d : (桌面pythonargparselearn.py-- help

usage : argparselearn.py [-h ] [-- foo foo ]

可选协议:

-h,--helpshowthishelpmessageandexit

--foo FOO foo help

d : (桌面pythonargparselearn.py-- foo 3

namespace(foo='3' ) )。

到目前为止,我掌握了规则解析器的基本使用方法

更改显示界面

通过添加初始化参数,参数可以使接口更人性化

prog参数可以更改程序的显示名称

描述可以添加说明信息

usage修改usage信息并复盖prog参数

epilog在末尾添加帮助信息

parser=argument parser (描述=' Owen introduce ',prog='argparseLearn ',usage='try to use ',epilog='thusing

usage: try to use

owen introduce

可选协议:

-h,--helpshowthishelpmessageandexit

--foo FOO foo help

thus is the end

还有其他参数:

add_help=False禁止显示帮助画面,仅接受参数

argument _ default=arg parse.suppress限制只能从命令行传递参数,而程序指定无效

allow_abbrev=False例如,如果输入--fooo,--foo,则无法识别参数。 默认情况下是可能的

如果conflict_handler='resolve '参数重复,则不报告错误

add _ help=falseoptionalarguments的帮助信息不显示

add_argument方法

参数类型

有两种类型的add_argument参数:带有前缀“-”或“--”的可选参数和不带前缀的位置参数,如果位置参数没有传递变量,则报告错误。

parser.add_argument('-foo ',help='foo help ' )。

parser.add_argument('bar ',help='bar help ' )。

d : (desktoppythonargparselearn.py3

名称空间(bar='3',foo=None ) )。

d : (desktoppythonargparselearn.py

usage : argparselearn.py [-h ] [-foo foo ] bar

argparselearn.py : error : thefollowingargumentsarerequired : bar

参数的默认值

store_const - add_argument中的默认action=’store’直接存储从执行终端或程序传递的变量。

要修改为常量,必须修改action='store_cons

t',然后指定const

parser.add_argument('--foo', action='store_const', const=42)

D:desktop>python argparseLearn.py --foo

Namespace(foo=42)

store_true/false - 如果需要存储True或者False,只要指定action='store_true/false'

parser.add_argument('--foo', action='store_true')

parser.add_argument('--foo', action='store_false')

D:desktop>python argparseLearn.py --foo

Namespace(foo=True)

需要注意的是,如果指定action为store_const或者store_true,则参数不可再进行赋值

D:desktop>python argparseLearn.py --foo 3

usage: argparseLearn.py [-h]

argparseLearn.py: error: unrecognized arguments: --foo 3

append - 同一参数,需要多个值时候,需要指定action='append'

parser.add_argument('--foo', action='append')

D:desktop>python argparseLearn.py --foo 1 --foo 2

Namespace(foo=['1', '2'])

dest - 如果想要修改变量名,使用dest

parser.add_argument('--foo',dest='oop'

D:desktop>python argparseLearn.py --foo 3

Namespace(oop='3')

version - 需要指定action='version',打印version后会自动退出

parser.add_argument('--version',action='version',version='PROG 2.0')

D:desktop>python argparseLearn.py --version

PROG 2.0

更酷的是,我们可以直接覆盖的argparse.Action的init和call方法来自定义action,我们限制dest不能为oop,否则报错ValueError

class FooAction(Action):

def __init__(self,option_strings,dest,nargs=None,**kwargs):

if dest=='oop':

raise ValueError('name oop is not allowed')

super().__init__(option_strings, dest, **kwargs)

def __call__(self,parser,namespace,values,option_strings=None):

setattr(namespace,self.dest,values)

parser.add_argument('--foo',action=FooAction,dest='oop')

D:desktop>python argparseLearn.py --foo 3

Traceback (most recent call last):

File "argparseLearn.py", line 13, in

parser.add_argument('--foo',action=FooAction,dest='opp')

File "D:python37libargparse.py", line 1353, in add_argument

action = action_class(**kwargs)

File "argparseLearn.py", line 6, in __init__

raise ValueError('name oop is not allowed')

ValueError: name oop is not allowed

参数个数

nargs - 可以指定一个参数可以具体有几个变量

parser.add_argument('--foo',nargs=2)

D:desktop>python argparseLearn.py --foo 3 2

Namespace(foo=['3', '2'])

当然会出现希望有一个以上以及无数个变量的情况,这时候就需要通配符

+一个变量及以上

?0或1个变量

*0或任意个变量

parser.add_argument('--foo',nargs='+')

D:desktop>python argparseLearn.py --foo 3 3 3

Namespace(foo=['3', '3', '3'])

argparse.REMAINDER - 可以将可选参数和位置参数之外的参数保存到一起

parser.add_argument('--foo')

parser.add_argument('bar')

parser.add_argument('args', nargs=argparse.REMAINDER)

D:desktop>python argparseLearn.py --foo 3 9 3 1

Namespace(args=['3', '1'], bar='9', foo='3')

这种情况下,需要将bar的参数3写在后面,否则包括foo都变成可选参数

D:desktop>python argparseLearn.py 9 --foo 3 3 1

Namespace(args=['--foo', '3', '3', '1'], bar='9', foo=None)

default - 不同于 action='store_const'的不可修改,default在指定默认值的同时,是可以修改的

parser.add_argument('--foo',default=3)

D:desktop>python argparseLearn.py --foo 32

Namespace(foo='32')

D:desktop>python argparseLearn.py

Namespace(foo=3)

type - 默认从终端或者程序读取的都是字符串,可以通过type修改类型

parser.add_argument('--foo',type=list)

D:desktop>python argparseLearn.py --foo 1

Namespace(foo=['1'])

choices - 限制变量只能在choice中

parser.add_argument('--foo', choices=['rock', 'paper', 'scissors'])

D:desktop>python argparseLearn.py --foo 1

usage: PROG [-h] [--foo {rock,paper,scissors}]

PROG: error: argument --foo: invalid choice: '1' (choose from 'rock', 'paper', 'scissors')

required - 可以通过required将可选参数设定为必须输入变量

parser.add_argument('--foo', required=True)

D:desktop>python argparseLearn.py

usage: PROG [-h] --foo FOO

PROG: error: the following arguments are required: --foo

metavar - 修改参数需要变量的信息,只是作为显示使用

parser.add_argument('--foo')

D:desktop>python argparseLearn.py -h

usage: PROG [-h] [--foo FOO]

optional arguments:

-h, --help show this help message and exit

--foo FOO

parser.add_argument('--foo',metavar=('var'))

usage: PROG [-h] [--foo var]

optional arguments:

-h, --help show this help message and exit

--foo var

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。