參數獲取getopt模塊

有時候我們需要寫一些腳本處理一些任務,這時候往往需要提供一些命令行參數,根據不同參數進行不同的處理,在Python裏,命令行的參數和C語言很類似(因爲標準Python是用C語言實現的)。在C語言裏,main函數的原型爲int main(int argc, char **argv),這裏主要指linux平臺, argc指的是命令行傳入的參數個數(程序的name爲第一個參數),而argv則是一個指針數組,每一個元素爲指向一個命令行參數的指針。在Python裏的命令行參數是存儲在sys.argv裏,argv是一個列表,第一個元素也爲程序名稱。

看下面的例子:

test.py

# -*- coding:utf-8 -*-


import sys


if __name__ == '__main__':

for item in sys.argv:

print i

在命令行運行./test.py  1 2 3,結果如下:

test.py

1

2

3

用這種方式可以進行命令行參數的判斷從而進行不同的動作。

而Python的標準庫裏實際上有專門處理命令行參數的getopt模塊,裏面的提供了2個函數和一個類,我們主要使用getopt函數,先看下函數原型:

def getopt(args, shortopts, longopts = []):

先看一個例子,這樣會便於理解。

try:

opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])

except getopt.GetoptError:

# print help information and exit:

for name, value in opts:

print name, value

for item in args:

print item

1. 處理所使用的函數叫getopt() ,因爲是直接使用import 導入的getopt 模塊,所以要加上限定getopt 纔可以。 

2. 使用sys.argv[1:] 過濾掉第一個參數(它是執行腳本的名字,不應算作參數的一部分)。 

3. 使用短格式分析串"ho:" 。當一個選項只是表示開關狀態時,即後面不帶附加參數時,在分析串中寫入選項字符。當選項後面是帶一個附加參數時,在分析串中寫入選項字符同時後面加一個":" 號 。所以"ho:" 就表示"h" 是一個開關選項;"o:" 則表示後面應該帶一個參數。 

4. 使用長格式分析串列表:["help", "output="] 。長格式串也可以有開關狀態,即後面不跟"=" 號。如果跟一個等號則表示後面還應有一個參數 。這個長格式表示"help" 是一個開關選項;"output=" 則表示後面應該帶一個參數。 

5. 調用getopt 函數。函數返回兩個列表:opts 和args 。opts 爲分析出的格式信息。args 爲不屬於格式信息的剩餘的命令行參數。opts 是一個兩元組的列表。每個元素爲:( 選項串, 附加參數) 。如果沒有附加參數則爲空串'' 。

6. 整個過程使用異常來包含,這樣當分析出錯時,就可以打印出使用信息來通知用戶如何使用這個程序。 

如上面解釋的一個命令行例子爲: 

'-h -o file --help --output=out file1 file2'

在分析完成後,opts 應該是: 

[('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

而args 則爲: 

['file1', 'file2']

下面就是根據不同參數處理:

for o, a in opts:

if o in ("-h", "--help"):

usage()

sys.exit()

if o in ("-o", "--output"):

output = a


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章