python中的命令行模塊有哪些?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)建站長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為望花企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),望花網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。Python作為一門腳本語言,經(jīng)常作為腳本接受命令行傳入?yún)?shù),Python接受命令行參數(shù)大概有三種方式。因?yàn)樵谌粘9ぷ鲌鼍皶?huì)經(jīng)常使用到,這里對(duì)這幾種方式進(jìn)行總結(jié)。
這里命令行參數(shù)模塊平時(shí)工作中用到最多就是這三種模塊:sys.argv,argparse,click。sys.argv和argparse都是內(nèi)置模塊,click則是第三方模塊。
先看一個(gè)簡單的示例:
#!/usr/bin/python import sys 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__": 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)
調(diào)用腳本:
python test_sysargv.py zhangsan 13 man nibi ss
腳本輸出:
Hello, My name is zhangsan.
I'm 13 years old.
I'm a man
Other word:
nibi
ss
sys.argv模塊不難理解,命令參數(shù)作為列表傳入Python腳本中,argv[0]是腳本的名字,argv[1]則是第一個(gè)參數(shù),后面以此類推。所以在腳本中只需要提取列表中的參數(shù)即可使用。上面演示的是正確調(diào)用Python腳本的情況,下面則是調(diào)用失敗的情況。
錯(cuò)誤調(diào)用腳本:
python test_sysargv.py zhangsan 13
錯(cuò)誤輸出:
Traceback (most recent call last): File "test_sysargv.py", line 16, in <module> sex = sys.argv[3] IndexError: list index out of range
關(guān)于錯(cuò)誤也很好理解,經(jīng)典的列表索引超出范圍,之所列表索引超出范圍,沒有傳入足夠的參數(shù)。當(dāng)然你可以使用try...except捕獲錯(cuò)誤。但是這種做法太過死板,因?yàn)樵诿钚兄斜仨毎凑漳_本規(guī)定的參數(shù)順序輸入?yún)?shù),所以這種模塊使用一般是針對(duì)一些需要的參數(shù)比較少并且固定的腳本。
同樣的先看一個(gè)簡單的示例:
#!/usr/bin/python import argparse parser = argparse.ArgumentParser(description='Test for argparse module.') # 構(gòu)建命令參數(shù)實(shí)例 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)
執(zhí)行腳本:
python3 test_argparse.py -t json -n zhangsan -a 13 -s man
腳本成功輸出:
Format of transfer file: json
Hello, My name is zhangsan.
I'm 13 years old.
I'm a man
Other word:
關(guān)于argparse模塊的使用,首先需要生成一個(gè)命令行參數(shù)的實(shí)例,然后通過對(duì)這個(gè)對(duì)象添加屬性,添加需要從命令行獲取的參數(shù),包括哪些是必要參數(shù)(required=True),哪些非必要參數(shù),同時(shí)也可以對(duì)每個(gè)參數(shù)進(jìn)行幫助提示(help="")。
而上面示例中分別添加了四個(gè)屬性,--name和-n同時(shí)可以再命令行中使用,都表示了參數(shù)name。ArgumentParser通過parse_ags()方法解析參數(shù),檢查命令行,將每個(gè)參數(shù)轉(zhuǎn)換為適當(dāng)?shù)念愋停栽谀_本中同時(shí)也可以使用args.n和args.name獲取到參數(shù),相對(duì)應(yīng)的如果沒有傳入該參數(shù),腳本中則獲取到None。
查看命令行參數(shù)之后腳本的幫助提示:
python3 test_argparse.py -h usage: test_argparse.py [-h] [--name NAME] [--age AGE] [--sex SEX] --type TYPE Test 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: 非必要屬性
另外在添加命令行參數(shù)的屬性中,還有更多的設(shè)置,多余的可以參考Python官方文檔,里面都有詳細(xì)的標(biāo)注,這里就不展開來講,總結(jié)的就是關(guān)于argparse模塊的使用非常簡便,同時(shí)十分人性化,也很符合日常工作的需要。
先開一個(gè)簡單的使用示例:
#!/usr/bin/python import 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()
執(zhí)行腳本:
python3 test_click.py -t 1 --age 13 --sex man
腳本輸出:
Format of transfer file: 1
Hello, My name is zhangsan.
I'm 13 years old.
I'm a man
Other word:
click模塊是Flask團(tuán)隊(duì)優(yōu)秀的開源項(xiàng)目,使用方法和argparse模塊很相似,同樣為命令行封裝了大量的方法,使用者只需要專注代碼功能的實(shí)現(xiàn)。
click模塊和argparse模塊不同的地方就是,click模塊使用裝飾器的方式給函數(shù)添加命令行屬性,關(guān)于裝飾器簡單來講就是能夠在不修改原有函數(shù)的基礎(chǔ)上添加功能。雖然使用裝飾器但是添加命令行屬性的方式和argparse模塊很相似,包括options中常用的參數(shù)含義也有很多類似的地方。值得注意的就是一開始需要通過command()將函數(shù)成為命令行的接口。
關(guān)于的click模塊的就大致講到這里,其余有興趣的可以再去了解一下。
看完上述內(nèi)容,你們掌握python中的命令行模塊有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
本文標(biāo)題:python中的命令行模塊有哪些-創(chuàng)新互聯(lián)
分享地址:http://www.rwnh.cn/article30/cecdso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站改版、網(wǎng)站營銷、外貿(mào)建站、微信公眾號(hào)、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容