亲宝软件园·资讯

展开

python开发简单的命令行工具简介

Feyncode 人气:0

介绍

Python模块argparse,这是一个命令行选项,参数和子命令的解释器,使用该模块可以编写友好的命令行工具,在程序中定义好需要的参数,argparse将弄清楚如何解析 sys.argv中的参数。argparse模块还支持自动生成帮助和用法信息,当模块解析到无效参数时,还可以发出错误。

python标准库sys模块

sys.agv				#命令行参数List,第一个元素时程序本身路径
sys.exit(n)		#退出程序,正常退出时exit(0)
sys.version 	#获取Python解释程序的版本信息
sys.maxint 		#最大的Int值
sys.path			#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.stdin			#输入线管
sys.stdout		#输出相关
sys.stderror	#错误相关

命令行工具

我们使用过很多的命令行工具,那么python开发出的命令行工具,能列举出哪些呢?
其实python本身就是一个命令行工具,在cmd中使用python --help,能输出python的帮助语句,这就是命令行工具解析参数后输出的一个例子。
再有,pip 也是一个典型的例子,在使用pip时,不同的子命令可以达成不同的效果。
当然知道和做到相距实在太过遥远,我也很难写出一个python或pip。

概念

argparse是一个较大的模块,提供了很多功能,它的文档相当详细和完整,包含大量示例。所以学习该模块最好的教程就是官方文档,argparse( https://docs.python.org/zh-cn/3/library/argparse.html),那么为什么我没去看呢,一方面是我并不需要复杂的功能,另一方面我的英语阅读能力不足以让我完全理解该文档。我们必须承认,英语水平分开了普通的技术人员,因此我正在努力提升英语水平。
在开发一个命令行工具前,我们首先需要知道一个命令行工具包含了哪些内容,它又是怎么识别我们提供的参数的,识别后又是怎么提供输出的,对待错误的选项,它又是如何调整的。
因此,官网使用了 ‘ls’ 这个命令来介绍命令行工具的几个概念:

了解了这些,我们通过几个例子可以更好的说明这个模块是如何解析从命令行获取的参数的,并且解析出的参数又是如何被程序使用的。

基础

命令行参数解析很容易,但是它也可以被加入很多参数,注入很多定义,这让最后的程序变得不堪入目,为了防止我的朋友,也就是你,在开始就头痛,我首先带来一个我认为最简单的案例。

示例

所有解析都应当配有示例,并展示对比来说明程序的行为有哪些改变。

argparse使用主要有四个步骤:

  • 导入argparse包
  • 创建 ArgumentParser() 参数对象
  • 调用 add_argument() 方法往参数对象中添加参数
  • 使用 parse_args() 解析添加参数的参数对象,获得解析对象
  • 程序其他部分,当需要使用命令行参数时,使用解析对象.参数获取

在未使用argparse模块前,我编写了这样一个python文件。

print("hello world!")

我们很熟悉这个案例,毫无疑问我们清楚python运行该文件时会得到什么样的输出,当我们在终端运行这个python文件demo1时,我们会使用以下命令。

$ python demo1.py
hello world!

是的,我们看到在命令行中,运行该文件输出了我们想要的结果,一般情况下,我们需要python文件输出某个值时,要么我们将该值在文件中写死,就像上面这个例子一样,我们已经在文件中将想要的输出写死在文件中,这个值在未被输出时就已经在程序中被决定。如果我们需要用户在终端中向程序提供某些值,来改变程序的行为,得到不同的输出,我们常用的手段是使用input,让程序读入终端的输入来达到这样的效果。不过这样做仍然需要手动的输入,如果是自动化程序,那么可以使用参数直接带入需要的变量将大大减少这样的交互。
接下来我将演示如何使用argparse来完成一个简单的参数解析。

import argparse #导入argparse包

parse = argparse.ArgumentParser() #创建参数对象
parse.add_argument('hello') #向参数对象中添加参数
args = parse.parse_args() #解析参数对象获得解析对象
if __name__ == '__main__':
   print(args.hello)

让我们来运行一下这个程序

$ python demo1.py helloworld
helloworld

很简单,这是一个容易的例子,需要注意的是,由于没有指定,所以命令行参数输入默认按顺序复制,顺序不同的话得到的结果将不同。
接下来我将带入一些官网上的案例,来继续解释argparse的一些进阶示例。

使用介绍

add_argument()方法,定义如何解析命令行参数,对于该方法,参数解释如下:

可选参数设置

通过在参数名前加 --, 设置为可选参数,如果未输入,则使用default默认值,若为设置default则默认赋值 None

parse.add_argument('-n', '--name', type=str, metavar='name', help='New flavor name')

引用名,可以缩短参数名,简化命令行参数输入;也就是使用-n或者-name可以获得一样的效果

必选参数设置

需要一个必选参数时,则设置required=True,这时,无论参数是否时可选参数,都必须输入

列表参数传入设置

添加narg='+' 这样可以在命令行中添加若干个参数,传入后将被添加到列表中。

互斥参数

也就是add_mutually_exclusive_group方法,这让我们可以添加两个互相排斥的参数,也就是只能选择其中一个参数添加

默认参数设置

set_defaults()可以设置一些参数的默认值

加载全部内容

相关教程
猜你喜欢
用户评论