讓我們在看這個題之前,看一下關於 異常 處理的介紹。地址:
http://www.cnblogs.com/Kaysin/archive/2013/02/10/2909837.html
然后,我們現在需要知道getopt是什么。
我們還是在參考書中尋找答案。
程序中本來用的sys.argv 可以處理比較簡單的輸入,但是一旦輸入復雜,他的使用就變的不是那么簡明了。這就違背了Python精神。
那么我們有了一個新的模塊來處理復雜的情況 —— getopt
getopt這個函數 就是用來抽取 sys.argv 獲得的用戶輸入來確定執行步驟。
getopt是個模塊,而這個模塊里面又有getopt 函數,所以getopt需要這樣這樣用。
getopt.getopt( [命令行參數列表], "短選項", [長選項列表] )
該函數返回兩個值. opts 和args
opts 是一個存有所有選項及其輸入值的元組.當輸入確定后,這個值不能被修改了.
args 是去除有用的輸入以后剩余的部分.
讓我們創建一個例子看一下.
import getopt,sys shortargs = 'f:t' longargs = ['directory-prefix=', 'format', '--f_long='] print getopt.getopt( sys.argv[1:], shortargs, longargs)
getopt函數的格式是getopt.getopt ( [命令行參數列表], "短選項", [長選項列表] )
短選項名后的冒號(:)表示該選項必須有附加的參數。
長選項名后的等號(=)表示該選項必須有附加的參數。
讓我們測試一下。
現在我們可以看一下答案的代碼了。
# -*- coding:utf8-*- import os,sys import getopt CDROM = '/media/cdrom0' def cdWalker(cdrom,cdcfile): export = "" for root, dirs, files in os.walk(cdrom): export+="\n %s;%s;%s" % (root,dirs,files) open(cdcfile, 'w').write(export) def usage(): print '''PyCDC 使用方式: python cdays-3-exercise-1.py -d cdc -k 中國火 #搜索 cdc 目錄中的光盤信息,尋找有“中國火”字樣的文件或是目錄,在哪張光盤中 ''' try: opts, args = getopt.getopt(sys.argv[1:], 'hd:e:k:') except getopt.GetoptError: usage() sys.exit() if len(opts) == 0: usage() sys.exit() c_path = '' for opt, arg in opts: if opt in ('-h', '--help'): usage() sys.exit() elif opt == '-e': #判別sys.argv[2]中是否有目錄,以便進行自動創建 #cdWalker(CDROM, arg) print "記錄光盤信息到 %s" % arg elif opt == '-d': c_path = arg elif opt == '-k': if not c_path: usage() sys.exit() #進行文件搜索
我們着重分析這句話
opts, args = getopt.getopt(sys.argv[1:], 'hd:e:k:')
根據我們之前分析,getopt.getopt 后面有三個部分,而這句話只用了兩個。
首先是命令行參數列表:sys.argv[1:],
其次是:短選項:'hd:e:k:' 短選項只能有一個字母
短選項后面有冒號,說明必須有輸入參數。
沒有冒號或 等號的選項,如果在命令中沒有涉及該選項,那么他不會再opts中出現。
就像例子中所述,我們可以用下面這句話來遍歷所有輸入項。
for opt, arg in opts: