Python 命令行参数
Python 命令行参数 提供了一种方便的方式,在运行程序时通过命令行接受一些信息。在Python脚本名称之后给出的参数被称为 命令行参数 ,它们被用于向程序传递一些信息。例如 –
这里的Python脚本名字是 script.py ,其他三个参数 – arg1 arg2 arg3是程序的命令行参数。有以下三个Python模块可以帮助解析和管理命令行参数:
- sys模块
- getopt模块
- argparse模块
sys模块 – 系统特定参数
Python sys 模块通过 sys.argv 提供对任何命令行参数的访问。它有两个目的 –
- sys.argv是命令行参数的列表。
-
len(sys.argv)是命令行参数的数量。
这里sys.argv[0]
是程序即脚本名字。
示例
考虑以下脚本test.py –
请按照以下方式运行上述脚本。本教程中的所有程序都需要从命令行运行,因此我们无法提供在线编译和运行这些程序的选项。请尝试在您的计算机上运行这些程序。
这个结果如下:
正如上面提到的,第一个参数总是脚本名称,而且也计入了参数的数量。
解析命令行参数
Python提供了一个 getopt 模块,帮助你解析命令行选项和参数。该模块提供了两个函数和一个异常来启用命令行参数解析。
getopt.getopt方法
该方法用于解析命令行选项和参数列表。以下是该方法的简单语法−
以下是参数的详细信息:
- args - 这是要解析的参数列表。
-
options - 这是脚本希望识别的选项字母的字符串,需要参数的选项后面应跟着一个冒号(:)。
-
long_options - 这是可选参数,如果指定了,必须是一个带有要支持的长选项名称的字符串列表。需要参数的长选项应跟着一个等号(=)。如果只接受长选项,则选项应为空字符串。
getopt.getopt()方法返回一个由两个元素组成的值:第一个元素是一个包含 (选项,值) 对的列表。第二个元素是在剥离选项列表后剩余的程序参数列表。返回的每个选项和值对都以选项作为其第一个元素,对于短选项,前面带有一个连字符(例如,’-x’),对于长选项,前面带有两个连字符(例如,’–long-option’)。
示例
以下是一个Python程序,在命令行接受三个参数:
- 第一个命令行参数是 -h ,它将用于显示程序的用法帮助。
- 第二个参数是 -i 或 --ifile ,我们将其视为输入文件。
- 第三个参数是 -o 或 --ofile ,我们将其视为输出文件。
以下是test.py脚本:
现在,按照以下方式运行上述脚本 −
这将产生以下结果:
我们还可以按照以下方式运行上述程序:
这将产生与-i和-o相同的结果:
我们可以使用 h 选项来检查程序的使用情况:
这将产生以下结果:
异常 getopt.GetoptError
考虑一下如果我们使用一些程序中没有实现的其他选项。这将引发异常。例如,让我们尝试使用错误的选项再次运行相同的程序 -p ,如下所示:
这会引发以下异常:
当在参数列表中发现未识别的选项,或者给定的选项需要一个参数但没有提供时,将引发此异常。异常的参数是一个指示错误原因的字符串。属性 msg 和 opt 给出了错误消息和相关选项。
示例
以下是一个正确的Python程序,使用了 try…except 块,并捕获 getopt.GetoptError 异常:
现在,按照以下步骤运行以上脚本 −
这将以优雅的方式运行程序,与我们在异常部分实现的一样,将显示程序的使用方法:
Python argparse模块
Python argparse 模块使编写用户友好的命令行界面变得简单。程序定义了它需要的参数,argparse会解析出这些参数。argparse模块还会自动生成帮助和用法消息。当用户提供给程序无效的参数时,模块也会报错。
示例
以下是一个简单使用 argparse 接受一个name参数的示例:
可以使用 add_argument() 方法添加任意数量的参数,实际上,您还可以提供参数的必需数据类型,如下所示。
然而,让我们尝试以以下方式运行上述程序:
这将显示以下帮助:
现在,如果我们提供我们的名字给程序,如下所示:
它将显示以下结果: