Python實(shí)現(xiàn)解析命令行參數(shù)的常見(jiàn)方法總結(jié)
簡(jiǎn)介
除ide的執(zhí)行方式外,命令行的方式執(zhí)行Python腳本是參數(shù)化程序執(zhí)行的一種常見(jiàn)且簡(jiǎn)單的方法,正確處理命令行參數(shù),可以提供給包含某種參數(shù)化信息的程序或腳本的參數(shù)。例如處理目錄或者文件通常作為命令行參數(shù)傳遞給腳本,用于使程序可以處理不同圖片或者不同類型文件。
基本形式
python main.py -a v1 -b v2 ...
3種常見(jiàn)的獲取和解析命令行參數(shù)的方法
1、sys.argv
2、getopt
3、argparse
sys.argv案例
1、sys.argv返回一個(gè)列表,第一個(gè)值為腳本名稱,列表的值類型為string。
2、參數(shù)數(shù)量:len(sys.argv)
3、獲取全部參數(shù):sys.argv
案例源碼1
# -*- coding: utf-8 -*- # time: 2022/9/1 0:10 # file: args_demo.py # 公眾號(hào): 玩轉(zhuǎn)測(cè)試開(kāi)發(fā) import sys def f1(): print(f"正在運(yùn)行的腳本名稱: {sys.argv[0]}") print(f"腳本的參數(shù)數(shù)量: {len(sys.argv)}") print(f"腳本的參數(shù): {sys.argv}") if __name__ == '__main__': f1()
執(zhí)行結(jié)果:
getopt案例:getopt 模塊是專門處理命令行參數(shù)的模塊,用于獲取命令行選項(xiàng)和參數(shù)。命令行選項(xiàng)使得程序的參數(shù)更加靈活,其支持短選項(xiàng)模式(-)和雙-選項(xiàng)模式(--)。該模塊提供了兩個(gè)方法及一個(gè)異常處理來(lái)解析命令行參數(shù)。
語(yǔ)法格式:
getopt.getopt(args, options[, long_options])
參數(shù)說(shuō)明:
args:要解析的命令行參數(shù)列表,一般是sys.argv[1:],需要過(guò)濾掉腳本名(sys.argv[0])
options:以字符串的格式定義,options 后的冒號(hào) “:” ,表示如果設(shè)置該選項(xiàng),必須有附加的參數(shù),否則就不附加參數(shù)
long_options:以列表的格式定義,long_options 后的等號(hào) “=” ,表示該選項(xiàng)必須有附加的參數(shù),不帶冒號(hào)表示該選項(xiàng)不附加參數(shù)
案例源碼2
# -*- coding: utf-8 -*- # time: 2022/9/1 0:10 # file: args_demo.py # 公眾號(hào): 玩轉(zhuǎn)測(cè)試開(kāi)發(fā) import sys import getopt def f1(): print(f"正在運(yùn)行的腳本名稱: {sys.argv[0]}") print(f"腳本的參數(shù)數(shù)量: {len(sys.argv)}") print(f"腳本的參數(shù): {sys.argv}") def f2(argv): input_file = "" output_file = "" opts, args = getopt.getopt(argv[1:], "hi:o:", ["help", "input_file=", "output_file="]) # "hi:o:": 短格式分析串, h 后面沒(méi)有冒號(hào), 表示后面不帶參數(shù); i 和 o 后面帶有冒號(hào), 表示后面帶參數(shù) # ["help", "input_file=", "output_file="]: 長(zhǎng)格式分析串列表, help后面沒(méi)有等號(hào), 表示后面不帶參數(shù); input_file和output_file后面帶冒號(hào), 表示后面帶參數(shù) # 返回值包括 `opts` 和 `args`, opts 是以元組為元素的列表, 每個(gè)元組的形式為: (選項(xiàng), 附加參數(shù)),如: ('-i', 'test.png'); # args是個(gè)列表,其中的元素是那些不含'-'或'--'的參數(shù) for opt, arg in opts: if opt in ("-h", "--help"): # 即:處理 -h參數(shù)的案例說(shuō)明,幫助文檔等 print('args_demo.py -i <input_file> -o <output_file>') print('or: args_demo.py --input_file=<input_file> --output_file=<output_file>') sys.exit() elif opt in ("-i", "--input_file"): input_file = arg elif opt in ("-o", "--output_file"): output_file = arg print(f'輸入文件為:{input_file}') print(f'輸出文件為:{output_file}') # 打印不含'-'或'--'的參數(shù) for i in range(0, len(args)): print(f'不含 - 或 -- 的參數(shù) {i + 1} 為:{args[i]}') if __name__ == '__main__': # f1() f2(sys.argv)
命令行依次執(zhí)行:
python args_demo.py -h python args_demo.py -i a.txt python args_demo.py -o b.txt python args_demo.py -i a.txt -o b.txt c.txt
執(zhí)行結(jié)果:
Exception getopt.GetoptError:在參數(shù)列表中沒(méi)有找到所傳遞參數(shù),或選項(xiàng)的需要的參數(shù)為空時(shí)會(huì)觸發(fā)該異常。異常的參數(shù)是一個(gè)字符串,表示錯(cuò)誤的原因。屬性 msg 和 opt 為相關(guān)選項(xiàng)的錯(cuò)誤信息。在上述代碼中添加異常處理,檢查此錯(cuò)誤信息。
使用錯(cuò)誤的格式選項(xiàng)傳遞參數(shù)執(zhí)行腳本:python args_demo.py -q
argparse案例:當(dāng)程序中使用采用復(fù)雜參數(shù)或多個(gè)文件名時(shí),推薦使用 Python 的 argparse 庫(kù),它以系統(tǒng)的方式處理命令行參數(shù),從而可以編寫用戶友好的命令行程序。Python 標(biāo)準(zhǔn)庫(kù) argparse 同樣也是用于解析命令行參數(shù)的模塊。首先,由程序確定所需的參數(shù),然后 argparse 將這些參數(shù)解析為 sys.argv。此外,argparse 會(huì)生成幫助和使用信息提示,并在提供無(wú)效參數(shù)時(shí)發(fā)出錯(cuò)誤。為了介紹此模塊,編寫 argparse_demo1.py,如下所示:
為了介紹此模塊,編寫 argparse_demo1.py,如下所示:
案例1
不帶參數(shù)運(yùn)行此腳本不會(huì)向 stdout 顯示任何內(nèi)容。但是,如果使用 --help 或 -h 選項(xiàng),將得到腳本的使用信息提示
import argparse parser = argparse.ArgumentParser() parser.parse_args()
執(zhí)行結(jié)果:
(venv)>python argparse_demo.py -h
usage: argparse_demo.py [-h]
optional arguments:
-h, --help show this help message and exit
(venv)>python argparse_demo.py --help
usage: argparse_demo.py [-h]
optional arguments:
-h, --help show this help message and exit
案例2
指定其他參數(shù)會(huì)導(dǎo)致錯(cuò)誤python argparse_demo.py -q
python argparse_demo.py -q usage: argparse_demo.py [-h] argparse_demo.py: error: unrecognized arguments: -q
案例3
添加一個(gè)參數(shù)需要調(diào)用方法 parser.add_argument
# -*- coding: utf-8 -*- # time: 2022/8/31 16:20 # file: argparse_demo1.py # author: tom import argparse parser = argparse.ArgumentParser() parser.add_argument("name", help="添加的第1個(gè)參數(shù)name,姓名。") args = parser.parse_args() print(f"args.name:{args.name}") print(f"type:{type(args.name)}")
使用范例:
python argparse_demo1.py tom python argparse_demo1.py -h python argparse_demo1.py
執(zhí)行結(jié)果:此時(shí)不帶參數(shù)運(yùn)行腳本則拋出缺少參數(shù)name
(venv) >python argparse_demo.py tom
args.name:tom
type:<class 'str'>
(venv) >python argparse_demo.py -h
usage: argparse_demo.py [-h] name
positional arguments:
name 添加的第1個(gè)參數(shù)name,姓名。
optional arguments:
-h, --help show this help message and exit
(venv) >python argparse_demo.py
usage: argparse_demo.py [-h] name
argparse_demo.py: error: the following arguments are required: name
使用--的形式:使用-的形式則--name改成 -name即可。
案例4
argparse 將提供的選項(xiàng)默認(rèn)視為字符串,新增int類型的案例
# -*- coding: utf-8 -*- # time: 2022/8/31 16:20 # file: argparse_demo1.py # author: tom import argparse parser = argparse.ArgumentParser() parser.add_argument("--name", help="添加的第1個(gè)參數(shù)name,姓名。") parser.add_argument("--age", help="添加的第2個(gè)參數(shù)age,年齡。", type=int) args = parser.parse_args() print(f"args.name:{args.name}") print(f"type:{type(args.name)}") print("*" * 50) print(f"args.age:{args.age}") print(f"type:{type(args.age)}")
使用范例:可使用兩種形式 --key=value / --key value
python argparse_demo.py --name=tom --age=30 python argparse_demo.py --name tom --age 30
執(zhí)行結(jié)果:
(venv) >python argparse_demo.py --name=tom --age=30
args.name:tom
type:<class 'str'>
**************************************************
args.age:30
type:<class 'int'>
(venv) >python argparse_demo.py --name tom --age 30
args.name:tom
type:<class 'str'>
**************************************************
args.age:30
type:<class 'int'>
到此這篇關(guān)于Python實(shí)現(xiàn)解析命令行參數(shù)的常見(jiàn)方法總結(jié)的文章就介紹到這了,更多相關(guān)Python解析命令行參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在OpenCV里實(shí)現(xiàn)條碼區(qū)域識(shí)別的方法示例
這篇文章主要介紹了在OpenCV里實(shí)現(xiàn)條碼區(qū)域識(shí)別的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python爬蟲之超級(jí)鷹驗(yàn)證碼應(yīng)用
眾所周知python是一個(gè)很強(qiáng)大的語(yǔ)言,它擁有眾多的庫(kù),今天我嘗試了使用超級(jí)鷹第三方平臺(tái)進(jìn)行驗(yàn)證碼的開(kāi)發(fā),需要的朋友可以參考下2022-08-08Pandas中DataFrame.head()函數(shù)的具體使用
DataFrame.head()是Pandas庫(kù)中一個(gè)非常重要的函數(shù),用于返回DataFrame對(duì)象的前n行,本文主要介紹了Pandas中DataFrame.head()函數(shù)的具體使用,感興趣的可以了解一下2024-07-07django模型動(dòng)態(tài)修改參數(shù),增加 filter 字段的方式
這篇文章主要介紹了django模型動(dòng)態(tài)修改參數(shù),增加 filter 字段的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03利用Python實(shí)現(xiàn)電影訂票系統(tǒng)
這篇文章主要介紹了利用Python實(shí)現(xiàn)電影訂票系統(tǒng),一部電影的詳細(xì)信息適合用?字典?結(jié)構(gòu)來(lái)存儲(chǔ),我們可以給字典里添加多個(gè)鍵值對(duì)來(lái)保存電影的名稱、座位表和宣傳時(shí)用的字符畫,需要的朋友可以參考一下2022-03-03python編寫adb截圖工具的實(shí)現(xiàn)源碼
adb截圖工具可用于Android手機(jī)及Android終端,Android端或者Android終端的遠(yuǎn)程截圖至本地電腦中,今天通過(guò)本文給大家介紹python編寫adb截圖工具的實(shí)現(xiàn)源碼,感興趣的朋友一起看看吧2021-08-08