Python中三種命令行參數(shù)利用方式詳解
一、sys.argv介紹
1.使用方法
我們可以通過(guò)導(dǎo)入 sys 模塊來(lái)使用 sys.argv,這個(gè)模塊提供了一個(gè)名為 argv 的列表,保存了命令行中傳遞的所有參數(shù)。在代碼中可以通過(guò) sys.argv[i] 來(lái)獲取第 i 個(gè)參數(shù)的值,其中 i 從 0 開始計(jì)數(shù),也就是說(shuō) 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 來(lái)避免在代碼中寫死文件名。
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:]是為過(guò)濾第一個(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)來(lái)實(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模塊主要用來(lái)為腳本傳遞命令參數(shù),采用預(yù)先定義好的選項(xiàng)來(lái)解析命令行參數(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=: 顯示到幫助文檔中用來(lái)提示用戶輸入期望的命令參數(shù);
- dest=:指定參數(shù)在options對(duì)象中成員的名稱,如果沒有指定dest參數(shù),將用命令行參數(shù)名來(lái)對(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問(wèn)題詳解
這篇文章主要介紹了python實(shí)操案例練習(xí),本文給大家分享的案例中主要任務(wù)有小學(xué)生算術(shù)、階乘的精確值、孿生素?cái)?shù)、6174問(wèn)題,需要的小伙伴可以參考一下2022-03-03
淺談Pandas dataframe數(shù)據(jù)處理方法的速度比較
這篇文章主要介紹了淺談Pandas dataframe數(shù)據(jù)處理方法的速度比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
Python 比較兩個(gè) CSV 文件的三種方法并打印出差異
這篇文章主要介紹了Python 比較兩個(gè) CSV 文件并打印出差異,本文將討論比較兩個(gè) CSV 文件的各種方法,我們將包括執(zhí)行此操作的最“Pythonic”方式和可幫助簡(jiǎn)化此任務(wù)的外部 Python 模塊,需要的朋友可以參考下2023-06-06
python編程實(shí)現(xiàn)12306的一個(gè)小爬蟲實(shí)例
這篇文章主要介紹了python編程實(shí)現(xiàn)12306的一個(gè)小爬蟲實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
python機(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)),本文通過(guò)實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03

