首頁 > 軟體

解讀Python指令碼的常見引數獲取和處理方式

2022-09-06 18:06:31

Python指令碼常見引數獲取和處理

平常寫 python 指令碼時會有一些從命令列獲取引數的需求,這篇文章記錄下常見的引數獲取和處理方式。

1. 使用args獲取引數

使用 sys.argv[] 可以接收指令碼的引數,得到一個列表型別,列表第一個元素是指令碼名稱,通過 sys.argv[1:] 得到命令列傳進來的所有引數。

程式碼範例:

test_args.py
import sys
argv = sys.argv[1:]
print("args==argv==", argv)

程式碼執行效果:

2. 使用getopt處理命令列傳入的引數

getopt 是專門用來處理命令列引數,使用格式大概為getopt(args, shortopts, longopts = []),其中引數 args 一般是sys.argv[1:], shortopts 是短格式引數 (-),longopts 是長格式引數(–)

程式碼範例:

'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教學和PDF電子書!
'''
test_args.py
argv = sys.argv[1:]
print("args==argv==", argv)
options, args = getopt.getopt(sys.argv[1:], "hd:n:", ["help", "date=", "name="])
print("args==getopt==",options, "options=====", args)

程式碼執行結果:

3. 標準庫argsparse

argsparse 是 python 的命令列解析的標準模組,內建於python,不需要安裝。這個庫可以讓我們直接在命令列中就可以向程式中傳入引數並讓程式執行。

程式碼範例:

'''
遇到問題沒人解答?小編建立了一個Python學習交流QQ群:778463939
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教學和PDF電子書!
'''
test_args.py
import argparse
parser = argparse.ArgumentParser(description='ArgUtils')
parser.add_argument('-d', type=str, default='000000', help="data date")
parser.add_argument('-a', type=str, default=None, help="agent_id_from_platform id")
args = parser.parse_args()

在 add_argument函數中,第一個引數是指令碼引數傳入名稱;type 是限制傳入引數的型別;default 為引數設定預設值;required 設定引數是否為必傳。

程式碼執行效果:

總得來說,args相容性比較強,可以接收任意方式的傳參,getopt 對傳入引數進行了分組,argparse 則使傳入的引數可讀性更高,支援的功能多一些。

Python指令碼獲取外部引數

方式1

使用sys模組獲取引數,比較簡單

import sys
print("python檔名: ", sys.argv[0])
print("第1個引數: ", sys.argv[1])
print("第2個引數: ", sys.argv[2])
# 傳參方式
python test.py arg1 arg2

方式2

如果引數較多,引數有預設值,建議使用argparse模組,閱讀性更高。

可以定義引數型別、預設值。

import argparse
# 設定引數名
parser = argparse.ArgumentParser()
parser.add_argument("-username", dest="username", type=str)
parser.add_argument("-password", dest="password", type=str)
parser.add_argument("-date", dest="date", type=str, default='2021-01-01')
# 獲取引數
args = parser.parse_args()
username = args.username
password = args.password
date = args.date
# 傳參方式
python test.py -username=xxx -password=xxx

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com