【python3基礎】命令行參數及 argparse
- 2019 年 11 月 4 日
- 筆記
目錄
在使用 argparse 解析 bool 參數時,需要設定 add_argument 的 action 參數為 'store_true' 或者 'store_false',而不是設定 type 參數為 bool,具體原因是,如果設定 type=bool,那麼無論該參數傳 True 還是 False,最後都只能得到 True。【這設定反人類】
命令行參數及 argparse 包
在我們需要控制不同分支程式碼的執行時,命令行參數最適用了,程式碼寫好後只需在命令行設定不同的參數運行即可。
在命令行參數的解析中,可以用到 argparse 包。
入門 argparse 可以參考教程 https://docs.python.org/zh-cn/3.6/howto/argparse.html
給出一個最簡單的 argparse 解析命令行參數的例子:(以下程式碼保存在 tmp.py 文件中)
import argparse parser = argparse.ArgumentParser() parser.add_argument('--seed',
dest='seed', type=int, default=0) args = parser.parse_args() print(args) 通過在命令行執行python3 tmp.py --seed 1來改變 seed 參數的值,可以通過args.seed獲取。
argparse 傳遞 bool 參數錯誤做法
argparse 對 bool 類型數據的傳遞,和其它類型如 int、float、str 不一樣,如下所示:
import argparse parser = argparse.ArgumentParser() # 這種寫法是錯的,結果不是你所想像的 parser.add_argument('--test',
dest='test', type=bool, default=False) args = parser.parse_args()
print(args) 如果我們在命令行執行python3 tmp.py --test False和python3 tmp.py --test True,我們會得到同樣的結果,args.test 都會是 True。這有點反人類了。
argparse 傳遞 bool 參數正確做法 1
在傳遞 bool 值時,正確的做法是:
import argparse parser = argparse.ArgumentParser() # action 的取值可以是 'store_true'、'store_false',都是小寫 parser.add_argument('--test',
dest='test', action='store_true', default=False) parser.parse_args()
print(args) 之後如果需要 test 參數為真,那麼就在命令行執行python3 tmp.py --test,否則,就不要帶上 test 參數,如python3 tmp.py。
argparse 傳遞 bool 參數正確做法 2
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--test',
dest="test", action='store_true')
parser.add_argument('--no_test',
dest="test", action='store_false')
parser.set_defaults(test=False)
args = parser.parse_args()
print(args) 如果需要設置args.test為 True,那麼執行python3 tmp.py --test;如果需要設置args.test為 False,執行 python3 tmp.py --no_test。
References
Parsing boolean values with argparse - Stack Overflow
