Python编写带选项的命令行程序方法
作者:_荣耀之路_ 时间:2023-11-18 20:47:35
运行python程序时,有时需要在命令行传入一些参数。常见的方式是在执行时,在脚本名后直接追加空格分隔的参数列表(例如 python test.py arg0 arg1 arg2),然后在脚本中就可以通过sys.argv获取所有的命令行参数。
这种方式的优点是传参方便,参数获取简单;缺点是执行脚本时,必须知道参数的顺序,并且不能设置默认值,所有参数每次都必须传入。
还有一种命令行传参方式是通过带选项的方式进行传参(例如python test.py -p0=arg0 -p1=arg1)。
这种方式的优点是参数不用按照固定的顺序传入,并且对于有默认值的参数,可以不传参数直接使用默认值;缺点是传入参数时需要额外加上选项。
对于带选项的命令行参数,可以通过python自带的getopt模块来进行解析。
主要方法:
getopt(args, shortopts, longopts = []):解析命令行选项和参数列表。
args是不包括运行程序引用的参数列表,通常来说就是sys.args[1:]。
shortopts是脚本要识别的短选项字母,如果短选项需要参数,需要在字母后加冒号“:”。
longopts是支持的长选项,是一个长选项名称的列表。选项名称不包括“-”。需要参数的长选项,需要在后面加一个等号“=”。
返回值包括两个列表:第一个列表中是(选项,值),如果选项没有参数,值为空字符串。第二个列表是剥离选项之后的程序参数列表。长项前用“--”,短项前用“-”。
另外要注意的是当进行命令行参数解析时,如果遇到了非选项的参数时,就会停止带选项参数的解析。
简单示例
#!/usr/bin/python
# -*- coding: gbk -*-
import sys
import getopt
def printUsage():
print ('''usage: test.py -i <input> -o <output>
test.py --in=<input> --out=<output>''')
def main():
inputarg=""
outputarg=""
try:
opts, args = getopt.getopt(sys.argv[1:],"hi:o:",["in=","out="])
except getopt.GetoptError:
printUsage()
sys.exit(-1)
for opt,arg in opts:
if opt == '-h':
printUsage()
elif opt in ("-i", "--in"):
inputarg=arg
elif opt in ("-o","--out"):
outputarg=arg
print ('输入:'+inputarg)
print ('输出:'+outputarg)
print ('其他程序参数:'+",".join(args))
if __name__=="__main__":
main()
来源:https://blog.csdn.net/asty9000/article/details/79254817
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
windows下安装make及使用makefile文件
![](https://img.aspxhome.com/file/2023/2/115772_0s.png)
浅析mysql 语句的调度优先级及改变
做设计还是做产品
ASP 高级模板引擎实现类
python读取csv和txt数据转换成向量的实例
vue百度地图 + 定位的详解
![](https://img.aspxhome.com/file/2023/0/123020_0s.png)
如何判断元素是否为HTMLElement元素
Python把图片转化为pdf代码实例
Python 批量合并多个txt文件的实例讲解
windows下mysql 5.7.20 安装配置方法图文教程
![](https://img.aspxhome.com/file/2023/4/117824_0s.png)
php使用composer常见问题及解决办法
![](https://img.aspxhome.com/file/2023/8/55398_0s.jpg)
Django在pycharm下修改默认启动端口的方法
![](https://img.aspxhome.com/file/2023/9/76689_0s.jpg)
Python操作MySQL数据库的示例代码
在Python 中同一个类两个函数间变量的调用方法
![](https://img.aspxhome.com/file/2023/2/101602_0s.jpg)
Python中顺序表的实现简单代码分享
![](https://img.aspxhome.com/file/2023/1/115141_0s.png)
Python3 类型标注支持操作
![](https://img.aspxhome.com/file/2023/2/128632_0s.jpg)
纯js实现动态时间显示
python绘制玫瑰的实现代码
![](https://img.aspxhome.com/file/2023/7/118747_0s.png)
Vue实现页面添加水印功能
微信小程序实现顶部搜索框
![](https://img.aspxhome.com/file/2023/2/132522_0s.jpg)