文章插圖

文章插圖
命令行參數工具是我們非常常用的工具 , 比如當我們做實驗希望調節參數的時候 , 如果參數都是通過硬編碼寫在代碼當中的話 , 我們每次修改參數都需要修改對應的代碼和邏輯顯然這不太方便 。比較好的辦法就是把必要的參數設置成通過命令行傳入的形式 , 這樣我們只需要在運行的時候修改參數就可以了 。
sys.argv
解析命令行傳入參數最簡單的辦法就是通過sys.argv , sys.argv可以獲取到我們通過命令行傳入的參數 。
import sysprint(sys.argv)用法很簡單 , 只需要調用sys.argv即可 。argv是一個數組 , 如果參數有多個 , 我們可以通過下標進行訪問 。但是有一點需要注意 , argv當中存儲的結果是從Python調用開始的 。我們來看一個例子 , 我們隨意傳入一些參數 , print sys.argv之后是這樣的 。
python test.py -a -c -d=222 >>> ['test.py', '-a', '-c', '-d=222']也就是說我們python運行test.py這個文件名也當做參數之一 , 所以我們要獲取自定義參數的話需要從argv[1]開始 。sys.argv的好處是方便 , 我們只需要訪問它就可以拿到傳入的參數了 。但是缺點也很明顯 , 就是功能太少了 。假如我們是看其他大神的代碼 , 我們想要知道運行的時候需要傳入什么參數 , 以及每個參數代表什么含義就做不到了 。
為了解決這個問題 , 我們需要使用封裝更多功能的工具 , 也是本篇文章的核心——argparse 。
基本用法
argparse是Python當中的一個庫 , 我們需要先import一下 , 這個庫我沒記錯應該是Python自帶的 , 也不需要安裝 , 我們直接就可以使用 。
在我們使用之前 , 我們需要先初始化這個parse , 也就是一個參數解析器 。
# 這里ArgumentParser可以傳入一個字符串 , 表示用途parser = argparse.ArgumentParser()parser.parse_args()這個時候其實就已經有了一個解析器了 , 我們在運行的時候可以傳入參數-h , 表示help , 也就是查看目前解析器當中定義的參數 。由于我們現在什么也沒有 , 所以能顯示出來的就只有help 。首先我們來介紹必選參數 , 它的定義和函數當中的必填參數是一樣的 , 也就是說我們運行程序必須要的參數 。如果不傳 , 那么程序不應該執行會進行報錯并提示 。
定義必選參數的方法非常簡單 , 我們只需要通過add_argument傳入參數的名稱就可以了 。
import argparseparser = argparse.ArgumentParser("For test the parser")parser.add_argument('test')args = parser.parse_args()print(args.test)這樣我們就定義了一個名叫test的參數 , 我們可以通過args.test來訪問它 。這個時候我們再運行python test.py -h就會發現提示的信息當中多了一行:
可選參數
有必選參數當然就有可選參數 , 可選參數由于可選可不選 , 所以我們在使用的時候需要在參數前加上標識-或者– 。比如我們參數名叫做test , 可以定義成-test或者–test , 這兩種都可以 , 也可以這兩種都定義 。
parser.add_argument('-test', '--test')我們運行-h可以發現optional arguments當中多了test和–test 。我們可以通過help參數傳入我們希望打印出來的提示語 , 這樣方便使用者在使用的時候了解參數的情況 。
比如我們把這行語句改成:
parser.add_argument('-test', '--test', help='just for help')這樣當我們運行的時候 , 就會看到提示語了:如果參數很多的時候 , 我們有時候可能不希望每一個都指定一個值 , 而是希望可以在不填的時候有一個默認值 。這個想法非常正常 , 想要做到這點也很簡單 , 我們可以通過default參數來指定 。
import argparseparser = argparse.ArgumentParser("For test the parser")parser.add_argument('-test', '--test', default=1, help='just for help')args = parser.parse_args()print(args.test)比如這樣我們在代碼當中把test參數的默認值設置成了1 , 當我們運行的時候 , 如果不填test這個參數的話 , 那么程序就會使用它的默認值也就是1 。但有一點默認值的信息并不會print在help當中 , 所以我們需要自己在提示語當中告知使用者默認值是多少 。
type
我們可以定義參數的默認值 , 當然也可以定義它的類型 。
因為命令行傳入的參數默認都是字符串 , 如果我們要進行數學上的計算 , 使用str還需要自己轉換 , 這就很不方便 。我們可以在傳入參數的時候就完成類型的匹配 , 這樣如果傳入參數的類型不對 , 那么直接報錯 , 不往下運行 。
想要做到這點也很簡單 , 通過type參數就可以實現 。
parser.add_argument('-test', '--test', default=1, type=int, help='just for help')比如當我們定義了一個int型的參數 , 而傳入的是類型不匹配的話 , 那么就會引起報錯:可選值
它同樣還支持可選值 , 可選值很好理解 , 就是我們希望限定傳入參數的范圍僅僅在幾個值當中 。比如說我們希望傳入的值不是0就是1 , 或者是在某幾個具體的值當中 , 這個時候我們可以通過choices參數來實現這一點 。
choices參數傳入的是一個list , 也就是我們的限定范圍 , 只有在這個范圍當中的值才被允許 。
parser.add_argument('-test', '--test', default=1, choices=[2, 3, 4], type=int, help='just for help')如果我們運行傳入test=1 , 那么就會引起報錯 , 告訴我們傳入的值不在choices范圍當中 。action
action是一個很神奇也很有用的操作 , 可以指定參數的處理方式 。我們默認的方式是store , 也就是存儲的意思 , 這個我們都能理解 。除此之外 , 還有store_true , 它表示出現則是true , 否則是false 。
parser.add_argument('-test', '--test', action='store_true', help='just for help')當我們把test參數的定義改成這樣之后 , 我們來對比一下運行的結果就明白了 。parser.add_argument('-test', '--test', action='store_const', const=23, help='just for help')這樣當我們指定-test參數之后 , 它會自動被賦值成23 。除了這兩個之外 , 另外一個很常用的參數是append , 可以將多次出現的同一個參數自動存入一個list當中 。
parser.add_argument('-test', '--test', action='append', type=int, help='just for help')nargs也是一個非常有用的參數 , 可以對參數進行一些花式操作 。nargs的傳入參數有以下幾種 , 首先是N , 也就是一個整數 。代表可以接收N個參數值 , 這N個值會被存入一個list當中 。
parser.add_argument('-test', '--test', nargs=2, type=int, help='just for help')另外一種傳入的參數是’+’或者是’*’ , 它可以將任意多個值存入一個list當中 。parser.add_argument('-test', '--test', nargs='*', type=int, help='just for help')【python命令行參數有什么用 python 命令行 參數】有了parser之后 , 我們在Python當中處理命令行參數會變得非常簡單 , 我們可以做各種各樣的定制化操作 。除了我們上面介紹的之外 , 還有一些其他的做法 , 相對來說不是非常常用 , 所以就不一一窮盡了 , 感興趣的同學可以自行了解一下 。
- python后端框架有哪些 python后端框架對比
- 命令行運行python文件 Python執行命令
- python中的隨機數函數 python隨機調用函數
- python中len函數怎么用 python len函數詳解
- java jar包運行命令 命令行 jar
- 單反相機夜景人像拍攝技巧 夜景人像拍攝技巧參數
- 0基礎學python python零基礎教程視頻教程
- 阿里云數據庫怎么用python 阿里云數據庫怎么用navicat連接
- loadrunner參數化九種模式 loadrunner參數化策略詳解
- 二極管的選用原則是什么 二極管選用應該注意的參數
