parse_args(argsparse):python和命令行之间的交互
初始化
假设我们创建一个“argp.py”的文件。
1 2 3 4 5 6 7 8 9 10 11 12 | import argparse # 引入模块 # 建立解析对象 parser = argparse.ArgumentParser() parser.add_argument( "echo" ) # xx.add_argument("aa") # 给xx实例增加一个aa属性 # 把parser中设置的所有"add_argument"给返回到args子类实例当中 # 那么parser中增加的属性内容都会在args实例中,使用即可。 args = parser.parse_args() parser.parse_args() print (arg.echo) # 打印定位参数echo |
运行的话,在python argp.py
后面加上abcd
(任意);
其将输出“abcd”。因为我们把abcd
赋给了args.echo
了。
给其设置help:parser.add_argument("echo", help = "echo is here~")
在命令行中输入:python argp.py -h
就可以得到相关的帮助信息。
type
假设我们写一个文件,在命令行将其编译时,同时输入一个数字,返回一个平方:
因为parse.add_argument()
对于接受的值默认其为str,如果要将之视为int类型,额外加一句“type=int”。
1 2 3 4 5 6 7 8 | import argparse parser = argparse.ArgumentParser() parser.add_argument( "square" , help = "To sqaure the number given" , type = int ) # 在命令行中,该py文件希望用户能给他一个参数,最终将之转化为:args.square args = parser.parse_arg() print (args.square * * 2 ) |
有了type程序也可以自动过滤掉相关的不符合类型的参数输入。
可选参数
在add_argument
前,给属性名之前加上“—”,就能将之变为可选参数。
1 2 3 4 5 6 7 8 9 | import argparse parser = argparse.ArgumentParser() parser.add_argument( "--bool" , help = "Whether to pirnt sth." ) # 这里的bool是一个可选参数,返回给args的是 args.bool args = parser.parse_args() if arg. bool : print ( 'bool = 1' ) |
对于简单程序,我们可能只需要两种值True
orFalse
:输入python argp.py --bool 1
得到bool = 1
既然是可选的,如果不指定(就是不使用它)的话,对应的变量会被设置为None。
对于简单程序,我们可能只需要两种值 True
orFalse
:
我们可以在原有的程序的基础上,在add_argument
中多加一个参数:action = "store_true"
这个时候,只要在命令行中加个bool,args.bool就是True
了,无需再加上之后的赋值内容,加了反而会报错。
但是,如果在parser.add_argument(..., required=True,type=int)
的话,那么这个参数就是必须的,因为他是required。
参数简写
parser.add_argument("-b","--bool",action="store_true")
这样,在程序内部我们依旧使用args.bool
,但是在命令行当中我们只需要多写一个“-b”就好了。
混合定位参数和可选参数
当我们使用多个parser.add_argument(...)
的时候,若将之视为可选参数,无则为None。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import argparse parser = argparse.ArgumentParser() parser.add_argument( "-b" , "--bool" , help = "to show the ans in a sentencen form" ,action = "store_true" ) parser.add_argument( "square" , type = int ) args = parser.parse_args() ans = args.square * * 2 if args. bool : print ( "the square of {} = {}" . format (args.square,ans)) else : print (ans) # 得到的效果为:一旦输入“-b”然后再输入相关的参数,就可以得到我们需要的结果了,不输入“-b”我们还是可以得到结果,只不过是另外一种方式而已。 |
限制输入的值:进一步,我们可以进行以下操作,或者对之进行一些了解:
- 如
parser.add_argument("-b","--bool",choices=[0,1],help="you can only input 0 or 1.")
其中,choice
可以限定我们能够输入的数。 - 参数值和顺序:
一般我们要把可选参数最后add,不可选参数放前面add。
而在命令行里面输入代码时,程序会先赋值“先add的参数选项”。
比如我先parser.add_argument(“a”,…)再b;
输入命令行的时候:python xx.py x y
,这个时候,args.a=x ; args.b=y。 - count操作计数赋值:
parser.add_argument("-b","--bool",action="count",type=int)
这个时候,在命令后加上 -b ——> bool=1 ; -bb ——> bool=2 ;以此类推。
但是这样的话,如果在程序里拿bool作为比较对象的时候,比如if bool > 0:
,不写“-b”的时候会报错,原因是此时的bool是None
,无法比较,要解决这个问题我们只需要加上一个 default 选项:parser.add_argument("-b","--bool",action="count",type=int,default=0)就好了。
高级用法
光上面那点知识,怕是根本算不上炫酷。我们肯定需要更牛逼的办法。
- 一个py文件的文件名字为“__file__”
- 参数冲突:
我们可以通过group
方法,来让group组的参数不可以被同时指定:12345678910111213141516171819import
argparse
parser
=
argparse.ArgumentParser()
group
=
parser.add_mutually_exclusive_group()
group.add_argument(
"-f"
,
"--form"
,action
=
"store_true"
)
group.add_argument(
"-F"
,
"--Form"
,action
=
"store_true"
)
parser.add_argument(
"x"
,
type
=
float
)
parser.add_argument(
"y"
,
type
=
float
)
args
=
parser.parse_args()
ans
=
args.x
*
*
args.y
if
args.form:
print
(
"{} to the power {} equals {}"
.
format
(args.x, args.y, ans))
elif
args.Form:
print
(
"{}^{} = {}"
.
format
(args.x,args.y,ans))
else
:
print
(ans)
注意点:帮助信息中若有“[a | b]”就意味着,ab不可以同时使用。
- 在参数简写的时候不要定义“-h”,这个是给help用的。
- 如果你设置了几个同类型(比如int)的可选参数,并且给他们简写参数了,比如:
x -> -x ; y -> -y …
那么在命令行赋值的时候就应该写:... -x 10 -y 100
x = 10 ; y = 100 ;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)