CDays-3 習題一 (處理命令行參數)及相關內容解析。Python getopt 簡介


讓我們在看這個題之前,看一下關於 異常 處理的介紹。地址:

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 ( [命令行參數列表], "短選項", [長選項列表] )
短選項名后的冒號(:)表示該選項必須有附加的參數。
長選項名后的等號(=)表示該選項必須有附加的參數。

讓我們測試一下。

image


現在我們可以看一下答案的代碼了。

# -*- 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:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM