本文目录导读:

在Python中解析命令行参数有多种方法,以下是几种常用方式:
sys.argv(最简单的方式)
import sys
# 获取所有命令行参数
print(f"脚本名称: {sys.argv[0]}")
print(f"所有参数: {sys.argv[1:]}")
# 示例用法
if len(sys.argv) > 1:
for i, arg in enumerate(sys.argv[1:], 1):
print(f"参数{i}: {arg}")
运行示例:
python script.py arg1 arg2 arg3 # 输出: 参数1: arg1, 参数2: arg2, 参数3: arg3
argparse(推荐,功能强大)
import argparse
def main():
# 创建解析器
parser = argparse.ArgumentParser(description='描述你的程序功能')
# 添加参数
parser.add_argument('name', help='必填参数 - 你的名字') # 位置参数
parser.add_argument('-a', '--age', type=int, help='可选参数 - 年龄', default=18)
parser.add_argument('-v', '--verbose', action='store_true', help='详细模式')
parser.add_argument('-c', '--color', choices=['red', 'blue', 'green'], help='颜色选择')
# 解析参数
args = parser.parse_args()
# 使用参数
print(f"名字: {args.name}")
print(f"年龄: {args.age}")
if args.verbose:
print("详细模式已开启")
if args.color:
print(f"选择的颜色: {args.color}")
if __name__ == "__main__":
main()
运行示例:
# 基本使用 python script.py 小明 # 带可选参数 python script.py 小明 --age 25 --verbose # 使用短选项 python script.py 小明 -a 25 -v # 查看帮助 python script.py -h
argparse 进阶用法
import argparse
def main():
parser = argparse.ArgumentParser(description='命令行参数解析示例')
# 不同类型的参数
parser.add_argument('input', help='输入文件')
parser.add_argument('-o', '--output', help='输出文件')
parser.add_argument('-n', '--number', type=int, default=10, help='数量')
parser.add_argument('--flag', action='store_true', help='标志位')
# 列表参数
parser.add_argument('--files', nargs='+', help='多个文件')
# 必需参数
parser.add_argument('--required-arg', required=True, help='必填参数')
args = parser.parse_args()
print(f"输入文件: {args.input}")
print(f"数量: {args.number}")
print(f"标志位: {args.flag}")
if args.files:
print(f"文件列表: {args.files}")
if __name__ == "__main__":
main()
getopt(较旧的方式)
import getopt
import sys
def main():
try:
# 短选项: h 和 v 无值,n: 和 o: 需要值
# 长选项: help 和 verbose 无值,name= 和 output= 需要值
opts, args = getopt.getopt(sys.argv[1:], "hvn:o:",
["help", "verbose", "name=", "output="])
except getopt.GetoptError as err:
print(f"错误: {err}")
sys.exit(1)
name = None
output = None
verbose = False
for opt, arg in opts:
if opt in ("-h", "--help"):
print("用法: script.py [-h] [-v] [-n NAME] [-o OUTPUT]")
sys.exit()
elif opt in ("-v", "--verbose"):
verbose = True
elif opt in ("-n", "--name"):
name = arg
elif opt in ("-o", "--output"):
output = arg
print(f"名字: {name}")
print(f"输出: {output}")
print(f"详细模式: {verbose}")
if __name__ == "__main__":
main()
Click 库(第三方,非常易用)
首先安装:
pip install click
import click
@click.command()
@click.argument('name') # 位置参数
@click.option('--age', default=18, help='年龄')
@click.option('--verbose', is_flag=True, help='详细模式')
@click.option('--color', type=click.Choice(['red', 'blue', 'green']))
def main(name, age, verbose, color):
"""这是一个示例程序"""
click.echo(f"名字: {name}")
click.echo(f"年龄: {age}")
if verbose:
click.echo("详细模式已开启")
if color:
click.echo(f"颜色: {color}")
if __name__ == "__main__":
main()
推荐使用建议
- 简单脚本:使用
sys.argv - 中等复杂度:使用
argparse(标准库,功能完整) - 复杂CLI应用:使用
Click或Fire库 - 维护旧代码:了解
getopt
argparse 是最推荐的方式,因为它:
- 是Python标准库,无需安装
- 自动生成帮助信息
- 支持类型检查和默认值
- 错误处理完善
- 文档丰富