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

可以看出string2string两个参数前面没有-, 它们输入时就不用加前面的标识(其实也不能加,加了报错),遇到这种参数程序就把传入参数中没有前面标识的依次填入,如上例中就是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包使用的更多相关文章

  1. 离线pip下载Python包

    离线pip下载Python包   这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧.      # 生产环境  windows xp# python 2 ...

  2. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  3. RobotFramework中加载自定义python包中的library(一个py文件中有多个类)

    结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...

  4. centos 7 下安装numpy、scipy等python包

    本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...

  5. python 包管理工具

    python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...

  6. Python 包管理工具解惑

    Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...

  7. Python 包的相对导入讲解

    [Python 包的相对导入讲解] 参考:http://www.dai3.com/python-import.html

  8. 转: 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/ ...

  9. 纯Python包发布setup脚本编写示例

    如果你有多个模块需要发布,而它们又存在于多个包中,那么指定整个包比指定模块可能要容易地多.即使你的模块并不在一个包内,这种做法也行的通:你可以告诉Distutils从根包(root package)处 ...

  10. windows 64位 dll文件 位置及python包rtree shapely安装

    位置 \Windows\System32 python包依赖包安装 rtree 依赖 spatialindex(spatialindex.dll   spatialindex_c.dll) shape ...

随机推荐

  1. sscms自己从数据库筛选内容

    where条件除了SiteId和ChannelId之外, 还需要加上IsChecked='True',而不是CheckedLevel

  2. Windows系统更改/迁移用户目录

    系统盘为C盘,C盘空间不足,C盘太满了,C盘清理时查看发现C:\Users目录占用几十个GB,以下方法可将Users目录大部分空间转移. 1. 准备工作 更改/迁移用户目录之前先自行备份当前用户的资料 ...

  3. vim多行缩进

    1.首先设置vim缩进空格 vim /etc/vim/vimrc 或者vim /etc/vimrc,添加一下文字 set smartindent set shiftwidth=4 # 缩进四个空格 # ...

  4. solidworks卸载方法,怎么完全彻底卸载删除清理干净solidworks各种残留注册表和文件?

    标题:solidworks重新安装方法,利用卸载清理工具完全彻底排查删除干净solidworks各种残留注册表和文件.solidworks显示已安装或者报错出现提示安装未完成某些产品无法安装的问题,怎 ...

  5. 浏览器对象模型(BOM)中的History对象模型

  6. 三、JMeter实战-快速上手JMeter

    1.JMeter基本操作 线JMeter最基本的操作有三个步骤: 先添加一个线程组. 添加HTTP请求. 添加查看结果树. 1.1.添加线程组 在测试计划下新建一个线程组 1.2.添加HTTP请求 在 ...

  7. FileLocator Pro注册机

  8. 电脑日常维护技巧(windows系统)

    一.磁盘检测 cmd-->chkdsk 二.磁盘修复 cmd-->sfc/scannow 三.删除缓存文件 运行-->%temp%

  9. 11、jmeter配置元件--计数器

    前面学过csv和变量 csv里面的数据是固定的  如果里面的数据不够  线程要么就停止要么就需要重头再来 不太灵活 用到固定化的数据,比如说多少个用户等等 如果有一些是变动的 随着线程数增加   数据 ...

  10. ArcEngine创建注记类及生成注记要素

    在宗地出图的时候遇到此功能要求,看代码 ※创建注记类 public void createBlackAnno(IMap pMap) { //创建mdb数据库文件 IWorkspaceFactory p ...