Python - 命令行参数
前言
每个脚本或者命令行程序都可以输入一些参数,通常有两种规范。
- 短格式,"-"号后面要紧跟一个选项字母,如果还有此选项的附加参数,可以用空格分开,也可以不分开,长度任意,可以用引号。
python main.py -o python main.py -oa python main.py -oabcd python main.py -o abcde python main.py -o "abcdef"
- 长格式,"--"号后面要跟一个单词,如果还有些选项的附加参数,后面要紧跟"=",再加上参数,"="号前后不能有空格。
python main.py --conf=conf.json
使用 sys.argv 获取参数
- 在 Python 可以使用
sys.argv
获取到命令行参数。 - 第一个参数
sys.argv[0]
表示代码本身文件路径。 - 所有参数从1开始,返回的结果是一个 list。
#-*- coding: uft-8 -*- import os,sys if __name__ == "__main__": arg1 = sys.argv[1] arg2 = sys.argv[2] print(sys.argv) # ['.\\\\main.py', 'a', 'b', 'd', 'e']
使用 getopt 获取参数
在使用 getopt的时候有如下内容需要注意。
- 使用切片过滤掉
sys.argv[0]
为脚本名的参数,sys.argv[1:]
为要处理的参数列表。 - 通常会有限验证参数是否合法,这里使用try进行判断。
- 这里
getopt.getopt()
函数需要两个参数,一个是命令行参数列表,一个是匹配选项。 - 其中匹配选项
"hi: o:"
表示程序可以匹配三个参数(注意:这串字符中间多了一个空格,因为Markdown语法会替换成Emoji表情,需去掉):
h
选项表示开关不带参数如:test.py -h
i:
选项表示-i参数后面必须存在参数值如:test.py -i abc.txt
o:
选项表示-o参数后面必须存在参数值如:test.py -o def.txt
- 这里
getopt.getopt()
函数返回两个列表,opts和args,其中opts是一个 tuple 列表,内容是(参数名,参数值),如果没有参数则为空字符串'',例如-h。args的值是格式以外的命令行参数。
Example:
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import getopt if __name__ == "__main__": try: opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help", "input="]) except getopt.GetoptError as e: print(e) print("Something wrong...") sys.exit(2) print(opts) print(args)
# 测试输出结果如下 python .\test.py -i abc.txt -o target.txt --help --input=input.txt otherInfo1 otherInof2 [('-i', 'abc.txt'), ('-o', 'target.txt'), ('--help', ''), ('--input', 'input.txt')] ['otherInfo1', 'otherInof2']
其他
2020-12-03 10:20:18 星期四 创建
本文来自博客园,作者:duchaoqun,转载请注明原文链接:https://www.cnblogs.com/duchaoqun/p/14078275.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-12-03 Python - 使用 PostgreSQL 数据库