argparse

Python解析命令行读取参数 - argparse模块

在多个文件或者不同语言协同的项目中,蟒蛇脚本经常需要从命令行直接读取参数万能的蟒蛇就自带了。argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写起来更麻烦一些。

如果脚本很简单或临时使用,没有多个复杂的参数选项,直接可以利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)比如如下名为test.py的脚本:

import sys
print "Input argument is %s" %(sys.argv)

在shell脚本中运行python test.py help可以得到Input argument is help的结果
.1)一般形式
但是大多数情况下,脚本很可能需要多个参数,而且每次参数的类型用处各不相同,那么这个时候在参数前添加标签表明参数的。类型和用途便十分有用,而利用argparse可以模块很网求方便得实现这一目的
同样用名为test.py了的脚本举个栗子:

import argparse

parser = argparse.ArgumentParser(description="your script description")            # description参数可以用于插入描述脚本用途的信息,可以为空
parser.add_argument('--verbose', '-v', action='store_true', help='verbose mode')   # 添加--verbose标签,标签别名可以为-v,这里action的意思是当读取的参数中出现--verbose/-v的时候
                                                                                   # 参数字典的verbose建对应的值为True,而help参数用于描述--verbose参数的用途或意义。
args = parser.parse_args()                                                         # 将变量以标签-值的字典形式存入args字典
if args.verbose:
    print "Verbose mode on!"
else:
    print "Verbose mode off!"

运行python test.py后面跟了-verbose / -v的时候会输出前者,如果什么都没有会输出后者。如果输入了-verbose / -v以外的参数则会报错:无法识别的论点
稍微提一下,行动参数表示值赋予键的方式,这里用到的是布尔类型;如果是'计数'表示将-verbose标签出现的次数作为冗长的值; '追加'表示将每次出现的该便签后的值都存入同一个数组再赐值。(嘛,一般后面两种用的比较少就不多说了)
PS:-help标签在使用argparse模块时会自动创建,因此一般情况不需要我们主动定义帮助信息。

$ python test.py --help
usage: test.py [-h] [--verbose]

your script description

optional arguments:
    -h, --help        show this help message and exit
    --verbose, -v     verbose mode  

2)必需参数
这种模式用于确保某些必需的参数有输入
parser.add_argument('--verbose', required=True, type=int)
.requires标签就是说-verbose参数是必需的,并且类型为int,输入别的类型会报错。

3)位置参数(位置参数)
位置参数与sys.argv调用比较像,参数没有显式的-xxx或者-xxx标签,因此调用属性也与sys.argv相同。

parser.add_argument('filename')    # 输入的第一个参数赋予名为filename的键
args = parser.parse_args()
print "Read in %s" %(args.filename)

输入侧python test.py test.txt则会输出Read in test.txt
此外,可以用NARGS参数来限定输入的位置参数的个数,默认为1。当然NARGS参数也可用于普通带标签的参数
parser.add_argument('num', nargs=2, type=int)表示脚本可以读入两个整数赋予NUM键(此时的值为2个整数的数组).nargs还可以'*'用来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值; '+'表示读取至少1个该位置参数表示该位置参数要么没有,要么就只要一个(PS:跟正则表达式的符号用途一致)。 '?'。比如用:

parser.add_argument('filename')
parser.add_argument('num', nargs='*)

可以就运行python test.py text.txt 1 2
由于没有标签,所以用位置参数的时候需要比较小心。

4)类型输入侧
之前已经提到了用键入参数就可以指定输入的参数类型。而这个类型类型还可以表示文件操作的类型从而直接进行文件的读写操作

parser.add_argument('file', type=argparser.FileType('r'))    # 读取文件
args = parser.parse_args()
for line in args.file:
    print line.strip()

5)默认参数值
一般情况下会设置一些默认参数从而不需要每次输入侧某些不需要变动的参数,利用默认参数即可实现。

parser.add_argument('filename', default='text.txt')

时候这个直接至运行python text.py就能得到Read in text.txt而不需要输入侧文件名了。

6)参数候选选择
表示该参数能接受的值只能来自某几个值候选值中,除此以外会报错,用选择参数即可比如:

parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])

参考:https//mkaz.tech/python-argparse-cookbook.html
https://docs.python.org/2/howto/argparse.html

标签: python argparse
3
0
currentDiggType = 0;
« 上一篇: stanford NLP学习笔记3:最小编辑距离(最小编辑距离)
» 下一篇: Python中数据框数据框中选择某一列非空的行
张贴在 2017年1月5日0点21分 家传宝钻 阅读( 14329 )评论( 3 编辑 收藏

### Python `argparse` 使用指南与常见问题解答 #### 什么是 `argparse` `argparse` 是 Python 标准库中的模块之一,专门用于处理命令行参数和选项。通过此模块可以轻松创建用户友好的命令行界面[^1]。 #### 项目目录结构及介绍 一个典型的使用 `argparse` 的项目的目录结构如下所示: ``` project/ │ ├── main.py # 主程序入口 ├── utils/ # 辅助函数或类的存储位置 │ └── helper.py # 提供额外的功能支持 └── README.md # 描述项目基本信息和其他相关内容 ``` 其中,`main.py` 文件通常是负责接收并解析来自终端用户的输入的地方。 #### 示例代码:控制台输入的回声效果 下面是一个简单的例子来展示如何利用 `argparse` 实现基本功能——即让用户能够传递字符串给脚本执行后返回相同的内容。 ```python # echo_example.py import argparse parser = argparse.ArgumentParser(description="Echo the input string back to user.") parser.add_argument("echo", type=str, help="String value that will be echoed.") args = parser.parse_args() print(f"Echoed String: {args.echo}") ``` 当运行上面这段代码时,你可以像这样调用它: ```bash $ python echo_example.py Hello_World Echoed String: Hello_World ``` #### 处理路径拼接的小贴士 为了避免手动编写跨平台兼容性的路径连接逻辑带来的麻烦,推荐总是采用内置方法代替硬编码方式。例如,可以用 `os.path.join()` 来安全可靠地组合文件夹名与文件名[^3]: ```python import os full_path = os.path.join('parent_dir', 'child_dir', 'file.txt') print(full_path) # 输出结果取决于当前操作系统环境变量配置情况 ``` #### 关于其他语言生态系统的对比 值得注意的是,在不同的编程环境中也存在着类似的工具服务于相似的目的。比如说,在 Java 生态圈子里就有名为 **argparse4j** 的第三方库,它的设计理念很大程度受到了原生 Python 版本的影响[^4]。然而两者之间仍然存在一定差异性需要注意区分对待。 --- ### 常见新手问题及其解决办法 #### Q1. 我遇到了版本更新后的兼容性难题怎么办? A1. 如果发现某些旧有特性不再受最新发行版的支持,则建议查阅官方发布日志寻找替代方案;同时也可以考虑锁定特定依赖项防止意外变动影响既有业务逻辑正常运作[^4]。 #### Q2. 如何添加可选参数而非强制要求用户提供全部必要字段? A2. 利用 `.add_argument()` 方法里的 `--option-name` 形式的标志位声明非必需型别的条目即可达成目标。例如: ```python parser.add_argument('--verbosity', default='low', choices=['high','medium','low'], help='Set output verbosity level.') ``` #### Q3. 支持子命令该如何操作? A3. 可以借助 `.add_subparsers()` 构建分层式指令体系架构。详情参阅下方片段示范: ```python subparsers = parser.add_subparsers(dest='command') start_parser = subparsers.add_parser('start', help='Start service operation.') stop_parser = subparsers.add_parser('stop', help='Stop running instance.') args = parser.parse_args(['start']) assert args.command == 'start' ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值