Python命令行參數(shù)的項目實踐
Python 命令行參數(shù)為運行程序時在命令行中接受某些信息提供了一種方便的方式。我們通常會把這些值和Python腳本的名稱一起傳遞。
要運行 Python 程序,我們在作系統(tǒng)的命令提示符終端執(zhí)行以下命令。例如,在 Windows 中,在 Windows 命令提示符終端中輸入以下命令。
$ python script.py arg1 arg2 arg3
這里 Python 腳本名是 script.py,其他三個參數(shù)——arg1、arg2、arg3 是程序的命令行參數(shù)。
如果程序需要接受用戶輸入,則使用 Python 的 input() 函數(shù)。當程序從命令行執(zhí)行時,用戶輸入會從命令終端接收。
示例
name = input("Enter your name: ")
print ("Hello {}. How are you?".format(name))程序從命令提示符終端運行如下 −

執(zhí)行時傳遞參數(shù)
很多時候,你可能需要把程序使用的數(shù)據(jù)放在命令行里,然后在程序內部使用。在命令行中提供數(shù)據(jù)的一個例子是Windows或Linux中的任何DOS命令。
在Windows中,你使用以下DOS命令將文件 hello.py 重命名為 hi.py。
C:\Python311>ren hello.py hi.py
在Linux中,你可以使用mv命令 −
$ mv hello.py hi.py
這里的ren或mv是需要新舊文件名的命令。由于它們與命令對齊,因此被稱為命令行參數(shù)。
您可以從命令行向Python程序傳遞值。Python在列表對象中收集參數(shù)。Python的sys模塊通過sys.argv變量提供對任何命令行參數(shù)的訪問。sys.argv是命令行參數(shù)列表,sys.argv[0]是程序,即腳本名稱。
示例
hello.py腳本在運行后使用input()函數(shù)接受用戶輸入。讓我們將其更改為接受來自命令行的輸入。
import sys
print ('argument list', sys.argv)
name = sys.argv[1]
print ("Hello {}. How are you?".format(name))從命令行運行程序,如下圖所示:

輸出如下所示:
C:\Python311>python hello.py Rajan argument list ['hello.py', 'Rajan'] Hello Rajan. How are you?
命令行參數(shù)始終存儲在字符串變量中。要將它們用作數(shù)字,可以使用類型轉換函數(shù)進行適當?shù)霓D換。
示例
在下面的示例中,輸入了兩個數(shù)字作為命令行參數(shù)。在程序內部,我們使用int()函數(shù)將它們解析為整數(shù)變量。
import sys
print ('argument list', sys.argv)
first = int(sys.argv[1])
second = int(sys.argv[2])
print ("sum = {}".format(first+second))它將產生以下輸出:
C:\Python311>python hello.py 10 20
argument list ['hello.py', '10', '20']
sum = 30
Python的標準庫包括幾個有用的模塊來解析命令行參數(shù)和選項——
- getopt − C風格的命令行選項解析器。
- argparse − 用于命令行選項、參數(shù)和子命令的解析器。
Python getopt 模塊
Python提供了一個getopt模塊,可以幫助您解析命令行選項和參數(shù)。此模塊提供兩個函數(shù)和一個異常來啟用命令行參數(shù)解析。
getopt.getopt() 方法
此方法解析命令行選項和參數(shù)列表。以下是此方法的簡單語法:
getopt.getopt(args, options, [long_options])
以下是參數(shù)的詳細信息:
- args − This is the argument list to be parsed.
- options − This is the string of option letters that the script wants to recognize, with options that require an argument should be followed by a colon (:).
- long_options − This is an optional parameter and if specified, must be a list of strings with the names of the long options, which should be supported. Long options, which require an argument should be followed by an equal sign ('='). To accept only long options, options should be an empty string.
此方法返回一個由兩個元素組成的值——第一個是(選項,值)對的列表,第二個是剝離選項列表后留下的程序參數(shù)列表。
返回的每個選項和值對都將選項作為其第一個元素,短選項以連字符作為前綴(例如“-x”),長選項以兩個連字符作為后綴(例如“--long option”)。
異常,getopt.GetoptError
當在參數(shù)列表中發(fā)現(xiàn)一個無法識別的選項,或者當一個需要參數(shù)的選項沒有給出時,就會出現(xiàn)這種情況。
異常的參數(shù)是一個指示錯誤原因的字符串。屬性msg和opt給出了錯誤消息和相關選項。
示例
假設我們想通過命令行傳遞兩個文件名,我們還想提供一個選項來檢查腳本的使用情況。腳本的用法如下:
usage: test.py -i <inputfile> -o <outputfile>
以下是test.py的腳本:
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print ('Input file is "', inputfile)
print ('Output file is "', outputfile)
if __name__ == "__main__":
main(sys.argv[1:])現(xiàn)在,按如下方式運行上述腳本:
$ test.py -h usage: test.py -i <inputfile> -o <outputfile> $ test.py -i BMP -o usage: test.py -i <inputfile> -o <outputfile> $ test.py -i inputfile -o outputfile Input file is " inputfile Output file is " outputfile
Python argparse 模塊
argparse 模塊提供了編寫非常易用命令行接口的工具。它處理如何解析 sys.argv 列表中收集的參數(shù),自動生成幫助,并在給出無效選項時發(fā)出錯誤信息。
設計命令行界面的第一步是設置解析器對象。這通過argparse模塊中的ArgumentParser()函數(shù)實現(xiàn)。函數(shù)可以作為描述參數(shù)給出一個解釋字符串。
首先,我們的腳本將從命令行執(zhí)行,無需任何參數(shù)。不過 使用解析器對象的parse_args()方法,但由于沒有參數(shù),因此沒有任何參數(shù)。
import argparse parser=argparse.ArgumentParser(description="sample argument parser") args=parser.parse_args()
當上述腳本運行時 −
C:\Python311>python parser1.py C:\Python311>python parser1.py -h usage: parser1.py [-h] sample argument parser options: -h, --help show this help message and exit
第二種命令行使用方式會給出 −help 選項,如圖所示,會生成幫助信息。−help參數(shù)默認可用。
現(xiàn)在我們定義一個參數(shù),這個參數(shù)是腳本運行的必定條件,如果不給出,腳本應拋出錯誤。這里我們通過 add_argument() 方法定義參數(shù) 'user'。
import argparse
parser=argparse.ArgumentParser(description="sample argument parser")
parser.add_argument("user")
args=parser.parse_args()
if args.user=="Admin":
print ("Hello Admin")
else:
print ("Hello Guest")該腳本的幫助現(xiàn)在顯示一個位置論元,形式為“用戶”。程序會檢查它的值是否為“管理員”,并打印相應的消息。
C:\Python311>python parser2.py --help usage: parser2.py [-h] user sample argument parser positional arguments: user options: -h, --help show this help message and exit
使用以下命令 −
C:\Python311>python parser2.py Admin Hello Admin
但以下用法顯示的是Hello Guest message。
C:\Python311>python parser2.py Rajan Hello Guest
add_argument()方法
我們可以在 add_argument() 方法中為參數(shù)賦予默認值。
import argparse
parser=argparse.ArgumentParser(description="sample argument parser")
parser.add_argument("user", nargs='?',default="Admin")
args=parser.parse_args()
if args.user=="Admin":
print ("Hello Admin")
else:
print ("Hello Guest")這里 nargs 是應被消耗的命令行參數(shù)數(shù)量。'?'.如果可能,會從命令行消耗一個參數(shù),并作為一個項目生成。如果沒有命令行參數(shù),則會從默認中生成值。
默認情況下,所有參數(shù)都被視為字符串。要明確提及參數(shù)類型,請在 add_argument() 方法中使用類型參數(shù)。所有 Python 數(shù)據(jù)類型均為有效的類型值。
import argparse
parser=argparse.ArgumentParser(description="add numbers")
parser.add_argument("first", type=int)
parser.add_argument("second", type=int)
args=parser.parse_args()
x=args.first
y=args.second
z=x+y
print ('addition of {} and {} = {}'.format(x,y,z))它將產生以下輸出 −
C:\Python311>python parser3.py 10 20 addition of 10 and 20 = 30
在上述例子中,論證是強制的。為了添加可選參數(shù),可以在名稱前加上雙劃號--.以下情況下,姓氏論元是可選的,因為它前加了雙劃號(--surname)。
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("name")
parser.add_argument("--surname")
args=parser.parse_args()
print ("My name is ", args.name, end=' ')
if args.surname:
print (args.surname)一個字母的參數(shù)名稱加上單段前綴,作為簡短名稱選項。
C:\Python311>python parser3.py Anup My name is Anup C:\Python311>python parser3.py Anup --surname Gupta My name is Anup Gupta
如果希望參數(shù)只取定義列表中的值,則定義為選擇參數(shù)。
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("sub", choices=['Physics', 'Maths', 'Biology'])
args=parser.parse_args()
print ("My subject is ", args.sub)注意,如果參數(shù)值不來自列表中,則顯示無效選擇錯誤。
C:\Python311>python parser3.py Physics
My subject is Physics
C:\Python311>python parser3.py History
usage: parser3.py [-h] {Physics,Maths,Biology}
parser3.py: error: argument sub: invalid choice: 'History' (choose from
'Physics', 'Maths', 'Biology')到此這篇關于Python命令行參數(shù)的項目實踐的文章就介紹到這了,更多相關Python命令行參數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ubuntu系統(tǒng)下多個python版本如何設置默認python和pip
pip是一個用來安裝Python軟件包的工具,下面這篇文章主要給大家介紹了關于ubuntu系統(tǒng)下多個python版本如何設置默認python和pip的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-12-12
Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能)
這篇文章主要介紹了Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Django框架會話技術實例分析【Cookie與Session】
這篇文章主要介紹了Django框架會話技術,結合實例形式分析了Django框架Cookie與Session相關使用技巧與注意事項,需要的朋友可以參考下2019-05-05

