解析命令行參數的方法
一、關於解析命令行參數的方法
關於“解析命令行參數”的方法我們一般都會用到sys.argv跟optparse模塊。關於sys.argv,網上有一篇非常優秀的博客已經介紹的很詳細了,大家可以去這裏參考:https://www.cnblogs.com/aland-1415/p/6613449.html
這裏為大家介紹一個比sys.argv更強大的optparse模塊。
這裏說一句題外話,點開optparse的源碼,第一行註釋是這樣的:A powerful, extensible, and easy-to-use option parser。是否感受到了作者強有力的......
說回正題。當我們要利用server與client進行FTP文件傳輸的時候,在client端往往需要輸入諸如 -s 10.10.10.1 -p 9001 這樣的信息,當然我們不能控制用戶的輸入,如果用戶隨意的輸入錯誤的命令,比如不寫IP地址,只是寫-s -p 9001,或者只寫 -s -p。我們如果還用sys.argv獲取參數的話需要做很多麻煩的邏輯判斷,這給我們開發程序帶來了很大的不便。
但是如果我們利用optparse會十分便捷的解決這樣的問題。
二、optparse介紹
2.1 optparse的用法如下:
import optparse
parser = optparse.OptionParser() parser.add_option("-s", "--server", dest="server", help="ftp server ip_address") parser.add_option("-P", "--port", type="int", dest="port", help="ftp server port") parser.add_option("-u", "--username", dest="username", help="username info") parser.add_option("-p", "--password", dest="password", help="password info")
首先import optparse類,然後創建optparse對象parser,再使用add_option()來定義命令行參數,最後使用parse_args()來解析命令行。
2.2 舉例說明:
我們先新建一個test.py文件,代碼如下
import optparse class Wang_opt:def __init__(self): #初始化 parser = optparse.OptionParser() parser.add_option("-s", "--server", dest="server", help="ftp server ip_address") parser.add_option("-P", "--port", type="int", dest="port", help="ftp server port") parser.add_option("-u", "--username", dest="username", help="username info") parser.add_option("-p", "--password", dest="password", help="password info") #解析參數 self.options, self.args = parser.parse_args() print(self.options,self.args) if __name__ == ‘__main__‘: whw_opt = Wang_opt()
然後在test.py文件的目錄下運行python test.py,後面不跟任何參數,看看效果:
運行的結果一個是字典,裏面存放的是我們需要的信息,後面有一個“空列表”,我們再試試加上符合條件的參數以及不符合條件的參數:
這就說明,字典中存放的是我們需要的信息,如果用戶沒有輸入默認設置為None;而列表中存放的是“錯誤”信息。再返回頭看看源代碼,其實這個字典就是上面的self.options變量,列表就是self.args。optparse模塊解析的結果就是“我們想得到的信息”以及“用戶誤操作的輸入信息”——的確很強大!
當然,如果用戶不知道他需要輸入什麽命令,我們可以在後面輸入 -h,尋求幫助:
其實大家可以對照著源代碼,這些信息的關鍵字都是我們在add_option()方法中設置的——嗯,確實~A powerful, extensible, and easy-to-use option parser
解析命令行參數的方法