电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解python中的三種命令行模塊(sys.argv,argparse,click)

瀏覽:104日期:2022-07-02 09:43:16

Python作為一門腳本語言,經常作為腳本接受命令行傳入參數,Python接受命令行參數大概有三種方式。因為在日常工作場景會經常使用到,這里對這幾種方式進行總結。

命令行參數模塊

這里命令行參數模塊平時工作中用到最多就是這三種模塊:sys.argv,argparse,click。sys.argv和argparse都是內置模塊,click則是第三方模塊。

sys.argv模塊(內置模塊)

先看一個簡單的示例:

#!/usr/bin/pythonimport sysdef hello(name, age, sex, *args): print('Hello, My name is {name}.'.format(name=name)) print('I’m {age} years old.'.format(age=age)) print('I’m a {sex}'.format(sex=sex)) print('Other word:n{args}'.format(args='n'.join(args)))if __name__ == '__main__': file_name = sys.argv[0] name = sys.argv[1] age = sys.argv[2] sex = sys.argv[3] other = sys.argv[4:] hello(name, age, sex, *other)

調用腳本:

python test_sysargv.py zhangsan 13 man nibi ss

腳本輸出:

Hello, My name is zhangsan.I’m 13 years old.I’m a manOther word:nibiss

sys.argv模塊不難理解,命令參數作為列表傳入Python腳本中,argv[0]是腳本的名字,argv[1]則是第一個參數,后面以此類推。所以在腳本中只需要提取列表中的參數即可使用。上面演示的是正確調用Python腳本的情況,下面則是調用失敗的情況。

錯誤調用腳本:

python test_sysargv.py zhangsan 13

錯誤輸出:

Traceback (most recent call last): File 'test_sysargv.py', line 16, in <module> sex = sys.argv[3]IndexError: list index out of range

關于錯誤也很好理解,經典的列表索引超出范圍,之所列表索引超出范圍,沒有傳入足夠的參數。當然你可以使用try...except捕獲錯誤。但是這種做法太過死板,因為在命令行中必須按照腳本規定的參數順序輸入參數,所以這種模塊使用一般是針對一些需要的參數比較少并且固定的腳本。

argparse模塊(內置模塊)

同樣的先看一個簡單的示例:

#!/usr/bin/pythonimport argparseparser = argparse.ArgumentParser(description=’Test for argparse module.’) # 構建命令參數實例parser.add_argument('--name', '-n', help='name attribute: 非必要屬性')parser.add_argument('--age', '-a', help='age attribute: 非必要屬性')parser.add_argument('--sex', '-s', help='sex attribute: 非必要屬性')parser.add_argument('--type', '-t', help='type attribute: 非必要屬性', required=True)args = parser.parse_args()def hello(name, age, sex, *args): print('Hello, My name is {name}.'.format(name=name)) print('I’m {age} years old.'.format(age=age)) print('I’m a {sex}'.format(sex=sex)) print('Other word:n{args}'.format(args='n'.join(args)))if __name__ == '__main__': print('Format of transfer file: {type}'.format(type=args.type)) if args.name and args.age and args.sex: hello(args.name, args.age, args.sex)

執行腳本:

python3 test_argparse.py -t json -n zhangsan -a 13 -s man

腳本成功輸出:

Format of transfer file: jsonHello, My name is zhangsan.I’m 13 years old.I’m a manOther word:

關于argparse模塊的使用,首先需要生成一個命令行參數的實例,然后通過對這個對象添加屬性,添加需要從命令行獲取的參數,包括哪些是必要參數(required=True),哪些非必要參數,同時也可以對每個參數進行幫助提示(help='')。

而上面示例中分別添加了四個屬性,--name和-n同時可以再命令行中使用,都表示了參數name。ArgumentParser通過parse_ags()方法解析參數,檢查命令行,將每個參數轉換為適當的類型,所以在腳本中同時也可以使用args.n和args.name獲取到參數,相對應的如果沒有傳入該參數,腳本中則獲取到None。

查看命令行參數之后腳本的幫助提示:

python3 test_argparse.py -husage: test_argparse.py [-h] [--name NAME] [--age AGE] [--sex SEX] --type TYPETest for argparse module.optional arguments: -h, --help show this help message and exit --name NAME, -n NAME name attribute: 非必要屬性 --age AGE, -a AGE age attribute: 非必要屬性 --sex SEX, -s SEX sex attribute: 非必要屬性 --type TYPE, -t TYPE type attribute: 非必要屬性

另外在添加命令行參數的屬性中,還有更多的設置,多余的可以參考Python官方文檔,里面都有詳細的標注,這里就不展開來講,總結的就是關于argparse模塊的使用非常簡便,同時十分人性化,也很符合日常工作的需要。

click模塊

先開一個簡單的使用示例:

#!/usr/bin/pythonimport click@click.command()@click.option('--name', default='zhangsan', help='name attribute: 非必要屬性')@click.option('--age', help='age attribute', type=int)@click.option('--sex', help='sex attribute')@click.option('-t', help='type attribute: 必要屬性', required=True)def hello(t, name, age, sex, *args): print('Format of transfer file: {type}'.format(type=t)) print('Hello, My name is {name}.'.format(name=name)) print('I’m {age} years old.'.format(age=age)) print('I’m a {sex}'.format(sex=sex)) print('Other word:n{args}'.format(args='n'.join(args)))if __name__ == '__main__': hello()

執行腳本:

python3 test_click.py -t 1 --age 13 --sex man

腳本輸出:

Format of transfer file: 1Hello, My name is zhangsan.I’m 13 years old.I’m a manOther word:

click模塊是Flask團隊優秀的開源項目,使用方法和argparse模塊很相似,同樣為命令行封裝了大量的方法,使用者只需要專注代碼功能的實現。click模塊和argparse模塊不同的地方就是,click模塊使用裝飾器的方式給函數添加命令行屬性,關于裝飾器簡單來講就是能夠在不修改原有函數的基礎上添加功能。雖然使用裝飾器但是添加命令行屬性的方式和argparse模塊很相似,包括options中常用的參數含義也有很多類似的地方。值得注意的就是一開始需要通過command()將函數成為命令行的接口。關于的click模塊的就大致講到這里,其余有興趣的可以再去了解一下。

總結

關于這三個模塊值得注意的是,盡量貼近自己應用場景去選擇,真正的做到自己能夠方便使用才是你去使用這些模塊的原因。

以上就是詳解python中的三種命令行模塊(sys.argv,argparse,click)的詳細內容,更多關于python 命令行模塊的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 宜兴紫砂壶知识分享 - 宜兴壶人 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 动物解剖台-成蚊接触筒-标本工具箱-负压实验台-北京哲成科技有限公司 | 空气净化器租赁,空气净化器出租,全国直租_奥司汀净化器租赁 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 专注氟塑料泵_衬氟泵_磁力泵_卧龙泵阀_化工泵专业品牌 - 梭川泵阀 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 探鸣起名网-品牌起名-英文商标起名-公司命名-企业取名包满意 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 渗透仪-直剪仪-三轴仪|苏州昱创百科 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 海外仓系统|国际货代系统|退货换标系统|WMS仓储系统|海豚云 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 挨踢网-大家的导航! | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 间甲酚,间甲酚厂家-山东祥东新材料 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 苏州教学设备-化工教学设备-环境工程教学模型|同科教仪 |