Python 處理指令碼的命令列引數
阿新 • • 發佈:2018-12-07
# -*- 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