python中getopt函数详解
在運行程序時,可能需要根據不同的條件,輸入不同的命令行選項來實現不同的功能。目前有短選項和長選項兩種格式。短選項格式為"-"加上單個字母選項;長選項為"--"加上一個單詞。長格式是在Linux下引入的。許多Linux程序都支持這兩種格式。在Python中提供了getopt模塊很好的實現了對這兩種用法的支持,而且使用簡單。
一、getopt模塊有兩個函數,兩個屬性:
函數:
- getopt.getopt
- getopt.gnu_getopt
屬性:
- getopt.error
- getopt.GetoptError
這兩個屬性主要是用來拋出錯誤信息的,非常友好不是嗎?
我們經常用到的是:getopt函數:
getopt.getopt(args, shortopts, longopts=[])
args指的是當前腳本接收的參數,它是一個列表,可以通過sys.argv獲得
shortopts 是短參數 啥是短參數啊? 類似于 這樣:python test.py -h # 輸出幫助信息
longopts 是長參數 啥是長參數啊? 類似于 這樣:python test.py -help # 輸出幫助信息
結果如下:
root@Kali:~/python# python3.5 test.py -h ([('-h', '')], []) root@Kali:~/python# python3.5 test.py --help ([('--help', '')], []) root@Kali:~/python#可以看到已經接收了參數。并且做了處理,為啥我傳入sys.argv[1:]?
因為sys.argv里的argv[0]是當前腳本的文件名,不需要它去參與,要不然你的選項和選項值無法匹配,問題多多。
假設我要接收一個參數+參數值的選項怎么辦?
運行測試結果如下:
root@Kali:~/python# python3.5 test.py --filename=test [*] Filename is test root@Kali:~/python# python3.5 test.py --filename= [*] Filename is root@Kali:~/python# python3.5 test.py --help [*] Help info root@Kali:~/python# python3.5 test.py --version [*] Version is 0.01 root@Kali:~/python# python3.5 test.py -v [*] Version is 0.01 root@Kali:~/python# python3.5 test.py -f test [*] Filename is test root@Kali:~/python#來詳細解釋一下這幾行代碼
首先從短參數名開始。
我定義了'-h-f:-v' 大家發現沒有,在-f后面多了一個":"
這個":"代表了當前參數是有值的,是一個參數名+參數值的參數
如果我再加一個-o: 那么證明-o后面是可以接收一個值,這個值就是-o的參數值,將會保存到opts變量中。
長參數名的方式和短參數差不多,唯一的區別就是長參數如果要接收值,那必須得在后面加上一個"="
短參數使用的時候是參數名[空格]參數值
長參數使用的時候是參數名=參數值
PS:不理解可以看我的測試結果
opts與args:
- opts 為分析出的格式信息。args 為不屬于格式信息的剩余的命令行參數。
- opts 是一個兩元組的列表。每個元素為:( 選項串, 附加參數) 。如果沒有附加參數則為空串''
eg:
#!/usr/bin/env python #-*- coding:utf-8 -*-import sys import getoptlist=['-t','192.168.26.216','-r',256,'-p',80] args=['-h','-o','file','--help','--output=out','file1','file2'] opts, arg = getopt.getopt(args, "ho:", ["help", "output="])#"ho:"也可以寫成'-h-o:' print(opts) print(arg)for o, a in opts:if o in ("-h", "--help"):sys.exit()if o in ("-o", "--output"):output = a輸出結果:
E:\testPython\venv\Scripts\python.exe E:/testPython/a111/test1.py [('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')] ['file1', 'file2']Process finished with exit code 0?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的python中getopt函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在TCP端口筛选只允
- 下一篇: Bisulfite Sequencing