1. 程式人生 > >Python 處理指令碼的命令列引數

Python 處理指令碼的命令列引數

# -*- coding:utf-8 -*-
import sys

def test():
    """
    引數列表:sys.argv
    引數個數:len(sys.argv) 
    指令碼名: sys.argv[0] 
    引數1:  sys.argv[1] 
    引數2:  sys.argv[2]
    """
    print "引數個數為:"+ str(len(sys.argv))
    print "引數列表為:"+ str(sys.argv)
    print "指令碼名為:"+ sys.argv[0]
    for i in range(1, len(sys.argv)):
        
print ""+str(i)+"個引數:"+sys.argv[i] test()

Q: 如何識別到命令列選項(-u, -p)呢

A: getopt模組,支援短選項模式(-)和長選項模式(-)

1. getopt.getopt 方法:

getopt.getopt 方法用於解析命令列引數列表,語法格式如下:

getopt.getopt(args, options[, long_options])

方法引數說明:

  • args: 要解析的命令列引數列表。

  • options: 以字串的格式定義,options後的冒號(:)表示該選項必須有附加的引數,不帶冒號表示該選項不附加引數。

  • long_options: 以列表的格式定義,long_options 後的等號(=)表示如果設定該選項,必須有附加的引數,否則就不附加引數。

  • 該方法返回值由兩個元素組成: 第一個是 (option, value) 元組的列表。 第二個是引數列表,包含那些沒有’-‘或’–’的引數

2 Exception getopt.GetoptError

在沒有找到引數列表,或選項的需要的引數為空時會觸發該異常。

異常的引數是一個字串,表示錯誤的原因。屬性 msg 和 opt 為相關選項的錯誤資訊。

3. 例子:

def getCmdPar(argv):
    """
通過命令列得到指令碼傳遞引數 """ plattype_cmd = '' version_cmd = '' try: """ options, args = getopt.getopt(args, shortopts, longopts=[]) 引數args:一般是sys.argv[1:]。過濾掉sys.argv[0],它是執行指令碼的名字,不算做命令列引數。 引數shortopts:短格式分析串。例如:"ht:v:",h後面沒有冒號,表示後面不帶引數;t和v後面帶有冒號,表示後面帶引數。 引數longopts:長格式分析串列表。例如:["help", "type=", "version="],help後面沒有等號,表示後面不帶引數;type和version後面帶冒號,表示後面帶引數。 返回值options是以元組為元素的列表,每個元組的形式為:(選項串, 附加引數),如:('-i', '192.168.0.1') 返回值args是個列表,其中的元素是那些不含'-'或'--'的引數。 """ opts, args = getopt.getopt(argv, "ht:v:", ["help", "type=", "version="]) except getopt.GetoptError: print('Error: installTest.py -t <type> -v <version>') print(' or: installTest.py --type=<type> --version=<version>') sys.exit(2) # 處理 返回值options是以元組為元素的列表。 for opt, arg in opts: if opt in ("-h", "--help"): print(u'installTest.py -t <type> -p <version>') print(u'or: installTest.py --type=<type> --version=<version>') sys.exit() elif opt in ("-t", "--type"): plattype_cmd = arg #plattype.append(re.split('[,]', arg)) elif opt in ("-v", "--version"): version_cmd = arg #version.append(re.split('[,]', arg)) return plattype_cmd, version_cmd