argparser Python包使用
argparser Python包使用
导入
import argparse
定义parser对象(参数为介绍)
parser = argparse.ArgumentParser('test parser')
定义argument
传入字符串
首先我们看最简单的传入string的情况
parser.add_argument('-o', metavar='STRING', help='input string')
第一个参数是用于表示其后面的那个字符串是所要输入的字符串的命令形式,metavar是在提示或报错里面用于指代传入值的,help是你传入-h时的提示
比如
python ./test.py -o hello
传入的就是hello,同时,“-o”中o也用于索引,我们用
args = parser.parse_arg()
获得参数之后,就用args.o来取出这个传入的string
print(args.o)
可以输出
hello
然后我们来测试一下
import argparse
parser = argparse.ArgumentParser('test parser')
parser.add_argument('-o', metavar='STRING', help='input string')
parser.add_argument('-oo', metavar='STRING', help='input string')
parser.add_argument('string2', metavar='STRING2', help='input string')
parser.add_argument('string', metavar='STRING', help='input string')
parser.add_argument('--a', metavar='STRING', help='input string')
parser.add_argument('---aa', metavar='STRING', help='input string')
def main():
args = parser.parse_args()
print(args.string)
print(args.string2)
print(args.o)
print(args.oo)
print(args.a)
print(args.aa)
if __name__ == '__main__':
main()
以上程序,输入
python ./test.py hello world --a hi ---aa you --aaa what -o 11 -oo 22
输出的是
world
hello
11
22
hi
you
what
可以看出string2和string两个参数前面没有-, 它们输入时就不用加前面的标识(其实也不能加,加了报错),遇到这种参数程序就把传入参数中没有前面标识的依次填入,如上例中就是string中是world,string2中是hello,如果把add_argument中string和string2调换顺序就会是相反的。
而只要参数前面有-, 不管是一个还是两个或三个-, 最后都是去掉-做为索引,索引是一个还是多个字符也不影响
而根据进一步测试,如果把---省为--, 结果会是arg.aa变成None
python ./test.py hello world --a hi --aa you --aaa what -o 11 -oo 22
输出
world
hello
11
22
hi
None
what
其他情况擅自在命令中删增-都直接报类似下面的错
usage: test parser [-h] [-o STRING] [-oo STRING] [--a STRING] [---aa STRING]
[--aaa STRING]
STRING2 STRING
test parser: error: unrecognized arguments: --oo 22
所以使用的时候还是尽量不要瞎搞,下面还是保险都用--name吧(两个-符合习惯)
而且如果string 和string2不到值,就会出现以下报错
usage: test parser [-h] [-o STRING] [-oo STRING] [--a STRING] [---aa STRING]
[--aaa STRING] [--bb]
STRING2 STRING
test parser: error: the following arguments are required: STRING2, STRING
所以这种参数一定要传
而其他参数如果不传,里面的值是None,不会报错
确定布尔值
parser.add_argument('--bb', dest='bbb', action='store_false',
help='store bool')
这样会在args.bbb里面存上false
import argparse
parser = argparse.ArgumentParser('test parser')
parser.add_argument('--bb', dest='bbb', action='store_false',
help='store bool')
def main():
args = parser.parse_args()
print(args.bbb)
if __name__ == '__main__':
main()
运行
python ./test.py --bb
输出
False
如果是
parser.add_argument('--bb', dest='bbb', action='store_true',
help='store bool')
就会输出
True
注意是用dest里面的字符串(这里是args.bbb)索引
如果用args.bb,会报错
AttributeError: 'Namespace' object has no attribute 'bb'
传入整数,浮点数
import argparse
parser = argparse.ArgumentParser('test parser')
parser.add_argument('--test-freq', default=1, type=int, metavar='N',
help='run test evaluation every N epochs (default: 1)')
def main():
print(args.test_freq)
if __name__ == '__main__':
main()
运行
python ./test.py --test-freq 5
结果
5
如果运行
python ./test.py
结果
1
因为有default值(其实之前string也可以用default)
同时注意到命令行里test-freq中间的-在程序里变成_
浮点数就把type改为float
import argparse
parser = argparse.ArgumentParser('test parser')
parser.add_argument('--lr', default=0.001, type=float, metavar='LR',
help='learning rate(default=0.001)')
def main():
print(args.lr)
if __name__ == '__main__':
main()
输入
python ./test.py --lr 0.0001
输出
0.0001
以上的参数设置在一般程序里面都已经够用了,可以看出argparse还是很方便的。
argparser Python包使用的更多相关文章
- 离线pip下载Python包
离线pip下载Python包 这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows xp# python 2 ...
- 【转】linux和windows下安装python集成开发环境及其python包
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- RobotFramework中加载自定义python包中的library(一个py文件中有多个类)
结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...
- centos 7 下安装numpy、scipy等python包
本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...
- python 包管理工具
python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...
- Python 包管理工具解惑
Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...
- Python 包的相对导入讲解
[Python 包的相对导入讲解] 参考:http://www.dai3.com/python-import.html
- 转: CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法
from: http://www.linuxde.net/2014/05/15576.html CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法 2014/05/ ...
- 纯Python包发布setup脚本编写示例
如果你有多个模块需要发布,而它们又存在于多个包中,那么指定整个包比指定模块可能要容易地多.即使你的模块并不在一个包内,这种做法也行的通:你可以告诉Distutils从根包(root package)处 ...
- windows 64位 dll文件 位置及python包rtree shapely安装
位置 \Windows\System32 python包依赖包安装 rtree 依赖 spatialindex(spatialindex.dll spatialindex_c.dll) shape ...
随机推荐
- poi解析Excel2007海量数据
处理excel,开源的javaApI提供了两种,一种是jxl,一种是poi.poi提供的功能较多,所以我用的是poi. poi有两种模式,一个是用户模式(HSSFworkbook:支持Excel200 ...
- Core_DataCollect BacNet说明
/* * BACnet_AI 0 模拟输入.定义一个标准对象,其属性表示模拟输入的外部可见特征. BACnet_AO 1 模拟输出.定义一个标准对象,其属性表示模拟输出的外部可见特征. BACnet_ ...
- PageHeplper使用
1.引入POM 1 <dependency> 2 <groupId>com.github.pagehelper</groupId> 3 <artifactId ...
- 当MYSQL报错时
输入mysqld --console查看错误 针对error行进行排查
- 字符串替换Replace仅替换第一个匹配项
C#里面的String.Replace(string,string)方法替换的时候是替换所有的匹配项,但是有时候我们会遇到这样的需求,就是只替换第一个匹配项. 我这里自己写另一个方法来实现这个功能,求 ...
- java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:解决办法
激动的心,颤抖的手.本来web项目数据库连接的好好地,突然就连不上了,一直报java.sql.SQLException: No suitable driver found for jdbc:mysql ...
- 掷骰子【普通线性DP】【转移方程可以优化为矩阵快速幂】
掷骰子 思路 可以先定义一个状态f[i] [j]: 前i个骰子,最后一个面是j的方法数, 肯定超时,然鹅可以混一些分,代码如下 for(int i=1;i<=6;i++) f[0][i]=1; ...
- 使用git&GitHub通过两台电脑协同作业,助力办公室摸鱼
前情提要:工作有时候负荷比较小,会接一些咸鱼上的活儿或者自己学点软件技能,这时候会出现一个情况,公司笔记本一般不带回家,家里台式机,白天在公司摸鱼编辑的文件,晚上回家想接着干怎么办呢,或是晚上在家干的 ...
- 我做的mysql 一些题 里面大部分都是mysql的方法
基础题:-- 1. 查询Student表中的所有记录的Sname.Ssex和Class列.1 select sname,ssex,class from student;-- 2. 查询教师所有的单位即 ...
- python补全用法,windows环境和linux环境
一.windows中python tab具体如下: 1.python3环境装好后,初始环境是没有装readline模块的,先装它. pip install pyreadline 2.在在python的 ...