Python解析命令行参数的两种方法:sys.argv与getopt详解

小林子
小林子
发布时间:2026-10-13| 4人浏览过
原创

本文介绍Python中获取命令行参数的两种常用方法。首先演示使用sys模块直接遍历sys.argv列表以处理独立参数;随后深入讲解利用getopt模块解析组合参数(如-t mytest)的用法,包括短选项与长选项的定义及返回值处理,并提供完整示例代码供参考。

(一)单一独立的参数

若命令行输入的参数均为独立且单一的形式,可通过循环逐一读取所有参数。在sys模块中,直接调用args = sys.argv即可获取全部参数(返回值args为list类型)。其中,args[0]表示正在执行的Python文件路径,而args[1:]之后的内容才是实际传入的命令行参数。借助for循环即可遍历读取args列表,具体示例代码如下:

import sys

def usage():
	print """
This is usage.
This is usage.
This is usage.
"""

def main(argv):
	for arg in argv[1:]:
		if arg == '-t':
			pass
		elif arg == '-h' or arg == '--help':
			usage()
			sys.exit()
		elif arg == '-p':
			pass
		else:
			print "Error: invalid parameters"
			sys.exit()

if __name__ == '__main__':
	main(sys.argv)

(二)参数结合

当需要读取如-t mytest这类组合参数时,前述方法将不再适用。在Shell环境中可通过shift命令移动至下一个参数,但Python未提供类似功能,因此需采用其他处理方式。

一种解决方案是使用getopt模块(关于getopt的官方文档解释:点击打开链接)。该模块中的getopt函数允许指定参数的可能类型,并能够获取所有参数。

用法:

getopt.getopt(args, options[, long_options]) 

options参数用于指定短格式输入,即单横杠"-",例如"-h";long_options为可选参数,用于指定长格式输入,即双横杠"--",例如"--help"。若为单一参数输入,options和long_options仅需直接写入参数名即可。例如以下代码指定了两个单一参数:-h/--help与-t/--test:

opts, args = getopt.getopt(sys.argv[1:], 'ht', ['help', 'test'']) 

若参数后需继续接收后续值,则在options的参数名后添加冒号":",在long_options的参数名后添加等号"="。例如以下代码指定了三个参数:-h/--help、-t/--test以及-r path / --root path:

opts, args = getopt.getopt(sys.argv[1:], 'htr:', ['help', 'test','root=']) 

getopt函数的返回值包含两个元素,通常只需关注第一个。如下代码所示,第一个返回值opts为"is a list of (option, value) pairs",即形如-t mytest的元素对。当然,若-t后无需接参,则不存在value值。利用该pairs返回值,可通过for循环获取参数,无论是单一独立参数还是结合参数均适用,具体示例代码如下:

import sys
import getopt

def usage():
	print """
This is usage.
This is usage.
This is usage.
"""

def main(argv):
	try:
		opts, args = getopt.getopt(sys.argv[1:], 'm:p:h', ['miner=', 'params=', 'help'])
	except getopt.GetoptError:
		usage()
		sys.exit()
	
	for opt, arg in opts:
		if opt in ['-h', '--help']:
			pass
		elif opt in ['-t', '--test']:
			pass
		elif opt in ['-p', '--path']:
			param = arg
			print param
			sys.exit()
		else:
			print "Error: invalid parameters"
			usage()
			sys.exit()

if __name__ == '__main__':
	main(sys.argv)

此外,还有一个知识点:若需打印一大段字符串,可使用三个双引号包裹。如上述代码中的usage函数所示,需注意三双引号内的内容无需缩进,必须从行首开始书写,否则会导致错误。

以上关于Python获取命令行输入参数列表的实例代码即为分享的全部内容,希望能为大家提供参考,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。