parse_args(argsparse):python和命令行之间的交互
初始化
假设我们创建一个“argp.py”的文件。
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”。
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前,给属性名之前加上“—”,就能将之变为可选参数。
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')
对于简单程序,我们可能只需要两种值TrueorFalse:输入python argp.py --bool 1
得到bool = 1
既然是可选的,如果不指定(就是不使用它)的话,对应的变量会被设置为None。
对于简单程序,我们可能只需要两种值 TrueorFalse:
我们可以在原有的程序的基础上,在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。
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组的参数不可以被同时指定:import 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 ;
parse_args(argsparse):python和命令行之间的交互的更多相关文章
- python之命令行参数解析模块argparse
"""argparse模块使得写用户友好性命令行接口很容易,程序定义所需要的参数,argparse会从ays.argv中提取出这些参数.argparse模块也能自动的产生 ...
- 【python】命令行解析工具argparse用法
python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...
- python制作命令行工具——fire
python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...
- python 交互式命令行数据库连接助手 -- mysql、sql server (mssql)、redis
目录 python 交互式命令行数据库连接助手 0. 操作示例 1. python 连接mssql 2. python 连接mysql 3. python 连接redis n. Tips python ...
- 基于Python与命令行人脸识别项目(系列一)
Face Recognition 人脸识别 摘要:本项目face_recognition是一个强大.简单.易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,方便大家使用.对于本项目可以使用 ...
- Python 的命令行参数处理 optparse->argparse
optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代. 但是用习惯了optparse,还是很好用的撒. optparse使用起来,相比旧 ...
- python实现命令行解析的argparse的使用
参考https://docs.python.org/3.6/library/argparse.html argparse模块使编写用户友好的命令行界面变得很容易.程序定义了它需要什么参数,argpar ...
- Python解析命令行读取参数 -- argparse模块
在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...
- awk,perl,python的命令行参数处理
Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...
随机推荐
- 【Offer】[17] 【打印1到最大的n位数】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 思路分析 要考虑到大数问题, ...
- 解锁HMC8及HMC9的root用户
某天需要用HMC的root用户干点“坏事”,发现找了一圈都没有正确的HMC v8及v9的root用户破解教程,然后自己研究了一下,发现可以用root用户了.本文测试用的HMC以VMware works ...
- springboot使用memcache缓存
Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...
- sql 多行、一行 互转
原始数据: 期望数据: IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701 CREATE TABLE temp ...
- 在一个升序数组中添加最少的数字,使得从1--n之间所有的数都能用数组中几个数的和表示
一个Java的笔试题上面遇到的题,当时没有做出来. 拆分: 序列升序 1--n所有的数都要能表示 用数组中数字的和表示 添加最少的数字 思路:这个要先从小的数开始表示,因为大的数可以用小数表示. 1- ...
- Unity3D_04_GameObject,Component,Time,Input,Physics
Unity3D是一个Component-Based的游戏引擎,并且为GamePlay Programmer提供了很多游戏性层上的支持. 1.可以在图形界面上设计动画状态转换的Animator. 2.可 ...
- jmeter linux压测报错:Error in NonGUIDriver java.lang.IllegalArgumentException: Problem loading XML from:'/home/server/ptest/disk_out.jmx'.
1.linux环境jmeter与win环境编写脚本的jmeter版本不一致,版本改为一致 2.脚本中存在中文,去除中文 3.脚本中存在类似于jp@gc - Active Threads Over Ti ...
- VUE从入门到放弃(项目全流程)————VUE
VUE从入门到放弃(第一天)--整体流程 先想想一个项目,vue项目是从什么到什么,然后再什么的?那是什么呢? 搭建 ( vue-cli) 代码内容 运行 封装 成品 一.搭建(脚手架vue-cli) ...
- .Net Standard(.Net Core)实现获取配置信息
一.前言 在.Net Framework框架有专门获取webconfig配置的方法供我们使用,但是在.Net Core或者.Net Standard中没有可以直接使用的方法来获取配置文件信息,下面就来 ...
- SpringCloud(五)Zuul网关与分布式配置中心
在 Spring Cloud 微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(Ngnix),再到达服务网关(Zuul 集群),然后再到具体的服务.服务统一注册到高可用的服务注册中 ...