惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

PCI Perspectives
PCI Perspectives
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Palo Alto Networks Blog
S
Schneier on Security
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
K
Kaspersky official blog
Microsoft Azure Blog
Microsoft Azure Blog
T
The Exploit Database - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
G
GRAHAM CLULEY
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
I
Intezer
D
Docker
月光博客
月光博客
L
Lohrmann on Cybersecurity
Latest news
Latest news
B
Blog
罗磊的独立博客
M
MIT News - Artificial intelligence
S
Securelist
Know Your Adversary
Know Your Adversary
Help Net Security
Help Net Security
Recorded Future
Recorded Future
S
SegmentFault 最新的问题
N
Netflix TechBlog - Medium
T
Threatpost
H
Hacker News: Front Page
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
人人都是产品经理
人人都是产品经理
F
Fortinet All Blogs
博客园 - Franky
P
Proofpoint News Feed
大猫的无限游戏
大猫的无限游戏
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
A
About on SuperTechFans
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tor Project blog
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Engineering at Meta
Engineering at Meta
Webroot Blog
Webroot Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Microsoft Security Blog
Microsoft Security Blog

博客园 - yankchina

[C++]VisualC++2010Express英文版试用手记 [C++]C++学习的一些建议 [Soft]物联网时代中的编程语言 - yankchina - 博客园 [Web]Web在线地图API试用笔记 [PHP]PHP技术基础 [Blog]将syntaxhighlight与LatexMathML本地化 [Soft]软件技术的两个趋势 [Soft]RAD的代价 [Python]快速解析数据库视图XML配置获取数据库字段说明 用VBA批量输出Outlook通讯录内容 - yankchina - 博客园 试用交互原型设计软件Axure RP Pro 4 云计算零接触 Camtasia Studio 7 试用笔记 文档整理经验谈 命令行调用Lame批量压缩MP3 [C++]千万不要碰VisualStudio - yankchina - 博客园 CSS 使用经验备忘 用Compare It! 4 比较Word Wiki 比较
[Python]命令行解析器Argparse的试用手册
yankchina · 2010-08-14 · via 博客园 - yankchina

image Unix系统的一个核心思想是:建立一组小工具,然后通过管道的方式将其组合成大工具。这一思想指导Unix/Linux等成为最为实用的服务器操作系统。而在编写Unix/Linux的C/C++程序时,命令行解析器是必不可少的。只有通过命令行参数进行消息传递,才能充分利用管道、Bash脚本来进行自动化。C++中我最常用的一个命令行解析器是TCLAP。而在Python中,有一个更强大的命令行解析器 ArgParse

Argparse的使用很简单,主要有三个步骤:

  1. 创建解析器对象: parser = argparse.ArgumentParser( prog='PROG' )
  2. 添加参数: parser.add_argument(....)
  3. 进行解析: values = parser.parse_args()

Argparse默认是从 sys.argv 中进行解析,但也可以直接解析字符串,如
values = parser.parse_args('--foo 1 -x 2 -y 3'.split()),这在调试中很有用。

Argparse的优点主要有:

  • 位置参数:可以不用前置引导符来进行参数设置;
  • 可选参数:可指定哪些参数一定要提供,哪些是可选的;
  • 合成帮助:只需要在添加参数时给每个参数提供帮助说明,程序会自动给出Unix统一命令行帮助,其输出命令为 parser.print_help();
  • 可指定参数格式:通过Argparse给定的标识符 nargs,可指定某个引导符后参数的格式,其中N代表N个,?代表0或1个,*代表0或多个,+代表1或多个;
  • 子命令行;支持多个子命令行解析器(我认为这个功能不是很实用,毕竟Unix工具的目标是小巧实用);
  • 参数类型可定义:这样可以进行参数类型转换与检查,并且可以定义参数调用方式;
  • 自定义调用函数:这是一个高级技巧,其可以按照特定的格式编写一个回调对象类,这样在进行解析某个参数时,可自动回调这个对象的某个操作。
  • 限定范围:通过choices命令可以限定某个参数的取值范围;
  • 可继承多个解析器:这个功能很有用,其可以通过多个解析器来生成一个整合的解析器,其可以解析所有的参数;
  • 参数隐藏:利用 argparse.SUPPRESS 常量符,可设定某个参数是帮助隐藏还是整体隐藏,这样可以屏蔽一些高级参数设定;

Google Code 上的ArgParse 有很好的帮助文档,并附加一些参考样例,很值得研究学习。