1. 程式人生 > >解析命令行參數的方法

解析命令行參數的方法

帶來 sys and one 麻煩 ffffff 解析命令行 rgs ID

  一、關於解析命令行參數的方法

  關於“解析命令行參數”的方法我們一般都會用到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

解析命令行參數的方法