Python中三種命令行參數(shù)利用方式詳解
一、sys.argv介紹
1.使用方法
我們可以通過導(dǎo)入 sys 模塊來使用 sys.argv,這個(gè)模塊提供了一個(gè)名為 argv 的列表,保存了命令行中傳遞的所有參數(shù)。在代碼中可以通過 sys.argv[i] 來獲取第 i 個(gè)參數(shù)的值,其中 i 從 0 開始計(jì)數(shù),也就是說 sys.argv[0] 存儲(chǔ)的是 Python 腳本本身的名稱。
2.案例1
print("程序名:",sys.argv[0]) print("第一個(gè)參數(shù):",sys.argv[1]) print("第二個(gè)參數(shù):",sys.argv[2]) print("第三個(gè)參數(shù):",sys.argv[3])
執(zhí)行結(jié)果:
3.案例2——讀取文件內(nèi)容
假設(shè)我們有一個(gè)程序需要讀取一個(gè)文件名,并且對(duì)文件進(jìn)行操作,這時(shí)候我們可以使用 sys.argv 來避免在代碼中寫死文件名。
if len(sys.argv) < 2: print("usafe: python sysArgv.py filename") sys.exit() filename = sys.argv[1] try: with open(filename,'r') as f: print(f.read()) except: print("文件不存在") sys.exit()
執(zhí)行結(jié)果:
二、getopt
1.案例1
使用 sys.arg[1:]是為過濾第一個(gè)參數(shù)(第一個(gè)參數(shù)為Pylhon程序本身)
1、“-u:-p:” 為定義短格式選項(xiàng)(-)。這里的p和u為兩個(gè)選項(xiàng),u后面有“:”必須有選項(xiàng)值。
2、[“file="] 為定義長(zhǎng)格式選項(xiàng)(–)。這里的“=”和上面的短格式選項(xiàng)中的“:”一樣,后面必須有選項(xiàng)值。
getopt是對(duì)sys.argv獲取的命令行參數(shù)進(jìn)行二次處理。在運(yùn)行程序時(shí),可能需要根據(jù)不同的條件,輸入不同的命令行選項(xiàng)來實(shí)現(xiàn)不同的功能,比如-u代表后面是用戶,-p代表后面是密碼。調(diào)用getopt.getopt()會(huì)返回兩個(gè)列表,第一個(gè)列表賦值給opts,第二個(gè)列表賦值給args:
1、opts:是(選項(xiàng),選項(xiàng)值)的元組為一個(gè)元素的列表。如果沒有選項(xiàng)值為空字符串
2、args: 存放沒用選項(xiàng)單參數(shù)的列表。不屬于格式信息的剩余的命令行參數(shù):
import sys import getopt opts,argv = getopt.getopt(sys.argv[1:],'-u:-p:',["file="]) print("opts輸出結(jié)果為:",opts) print("args輸出結(jié)果為:",argv)
2.案例2——讀取文件內(nèi)容
簡(jiǎn)單實(shí)例:
import sys import getopt def usage(): print('-h: --help 幫助;') print('--file=文件名') def read(filename): try: with open(filename, 'r') as f: print(f.read()) except: print("文件不存在") sys.exit() def start(argv): file = "" if len(argv)<1: print("-h 獲取幫助信息") sys.exit() opts, argvs = getopt.getopt(argv, '-h', ["file="]) for opt,arg in opts: if opt == "-h": usage() elif opt == "--file": read(arg) if __name__ == '__main__': start(sys.argv[1:])
運(yùn)行結(jié)果:
三、optparse
案例1
optparse模塊主要用來為腳本傳遞命令參數(shù),采用預(yù)先定義好的選項(xiàng)來解析命令行參數(shù),與getopt函數(shù)不同的是optparse可以自動(dòng)生成幫助信息。
type=: 表示輸入命令行參數(shù)的值的類型,默認(rèn)為string,可以指定為string, int, choice, float,complex其中一種;
import optparse def start(): usage = "python %prog -u/--user <target user> -p/--password <target password>" parser = optparse.OptionParser(usage) parser.add_option('-u', '--user', dest='User', type='string', help='target user', default='root') parser.add_option('-p', '--password', dest='Pwd', type='string', help='target password') options, args = parser.parse_args() print("用戶名為", options.User) print("密碼為", options.Pwd) if __name__ == '__main__': try: start() except KeyboardInterrupt: print("interrupted by user, killing all threads...")
案例2——讀取文件內(nèi)容
import optparse import sys def read(filename): try: with open(filename, 'r') as f: print(f.read()) except: print("文件不存在") sys.exit() def start(): usage = "python %prog -u/--user <target user> -p/--password <target password> -f/--file <target file>" parser = optparse.OptionParser(usage) parser.add_option('-u', '--user', dest='User', type='string', help='target user', default='root') parser.add_option('-p', '--password', dest='Pwd', type='string', help='target password') parser.add_option('-f','--file', dest='Filename',type='string',help='write report to FILE', metavar='FILE',default='123.txt') print(parser.parse_args()) options, args = parser.parse_args() print("用戶名為", options.User) print("密碼為", options.Pwd) print("文件為",options.Filename) # for option,arg in parser.parse_args(): # if option.Filename == '-f': read(options.Filename) if __name__ == '__main__': try: start() except KeyboardInterrupt: print("interrupted by user, killing all threads...")
- default=: 表示命令參數(shù)的默認(rèn)值;
- Metavar=: 顯示到幫助文檔中用來提示用戶輸入期望的命令參數(shù);
- dest=:指定參數(shù)在options對(duì)象中成員的名稱,如果沒有指定dest參數(shù),將用命令行參數(shù)名來對(duì)options對(duì)象的值進(jìn)行存取。
- help=: 顯示在幫助文檔中的信息;
四、argparse
argparse是optparse的升級(jí)版本,與optparse相比,argparse使用更加簡(jiǎn)單
案例1
import argparse ''' argparse.ArgumentParser().add_argument參數(shù): 1、可以設(shè)置多個(gè)選項(xiàng)字符串,比如上面的'-u','--user'這兩個(gè),用的時(shí)候任選其一; 2、type用于檢測(cè)命令行輸入?yún)?shù)的數(shù)據(jù)類型是否符合要去,有string、int、float等類型; 3、dest=用于定義選項(xiàng)存放的位置,作為后面的第一個(gè)字典(options)的鍵,值為命令行輸入的參數(shù); 4、help用于定義幫助信息; 5、default設(shè)置默認(rèn)值 ''' parse = argparse.ArgumentParser() parse.add_argument('-u', '--user', dest='User', type=str, help='target user', default='root') parse.add_argument('-s','--sex',dest='Sex',type=str,choices=['男','女'],default='男',help='target sex') parse.add_argument('-n','--number',dest='Num',required=True,type=int,default='target two number') print(parse.parse_args().User,parse.parse_args().Sex,parse.parse_args().Num)
案例2——讀取文件內(nèi)容
import sys,argparse def read(filename): try: with open(filename, 'r') as f: print(f.read()) except: print("文件不存在") sys.exit() def start(): parse = argparse.ArgumentParser() parse.add_argument('-u', '--user', dest='User', type=str, help='target user', default='root') parse.add_argument('-s','--sex',dest='Sex',type=str,choices=['男','女'],default='男',help='target sex') parse.add_argument('-n','--number',dest='Num',required=True,nargs=1,type=int,default='target two number') parse.add_argument('-f','--file',dest='File',type=str,default='123.txt') print(parse.parse_args().User,parse.parse_args().Sex,parse.parse_args().Num,parse.parse_args().File) read(parse.parse_args().File) if __name__ == '__main__': start()
總結(jié)
argparse比較常用
到此這篇關(guān)于Python中三種命令行參數(shù)利用方式詳解的文章就介紹到這了,更多相關(guān)Python命令行參數(shù)利用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python真題案例之小學(xué)算術(shù)?階乘精確值?孿生素?cái)?shù)?6174問題詳解
這篇文章主要介紹了python實(shí)操案例練習(xí),本文給大家分享的案例中主要任務(wù)有小學(xué)生算術(shù)、階乘的精確值、孿生素?cái)?shù)、6174問題,需要的小伙伴可以參考一下2022-03-03淺談Pandas dataframe數(shù)據(jù)處理方法的速度比較
這篇文章主要介紹了淺談Pandas dataframe數(shù)據(jù)處理方法的速度比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04Python 比較兩個(gè) CSV 文件的三種方法并打印出差異
這篇文章主要介紹了Python 比較兩個(gè) CSV 文件并打印出差異,本文將討論比較兩個(gè) CSV 文件的各種方法,我們將包括執(zhí)行此操作的最“Pythonic”方式和可幫助簡(jiǎn)化此任務(wù)的外部 Python 模塊,需要的朋友可以參考下2023-06-06python編程實(shí)現(xiàn)12306的一個(gè)小爬蟲實(shí)例
這篇文章主要介紹了python編程實(shí)現(xiàn)12306的一個(gè)小爬蟲實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)
這篇文章主要介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-04-04使用Pytorch構(gòu)建第一個(gè)神經(jīng)網(wǎng)絡(luò)模型?附案例實(shí)戰(zhàn)
這篇文章主要介紹了用Pytorch構(gòu)建第一個(gè)神經(jīng)網(wǎng)絡(luò)模型(附案例實(shí)戰(zhàn)),本文通過實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03