在本文中,我們將學習 Python 中的 argparse 模塊。我們將探索它的工作原理和功能。對於基礎開發人員、工程師和計算機科學家來說,這是一個非常重要的話題。眾所周知,Python 因其包含豐富的庫而廣受歡迎。如果開發人員為命令行編寫腳本,他/她還需要傳遞我們可以使用 argparse 庫創建的命令行參數。
在本文中,我們將探討以下與 argparse 相關的主題。
- 什麼是命令行界面?
- Python 中的 argparse 是什麼?
- 如何實現 Python argparse 庫來創建命令行界面?
- 命令行界面中的參數類型
- Python 參數解析位置參數
- Python 參數解析位置參數默認值
- 使用可選參數的簡稱
- 用 argparse 組合可選參數和位置參數
- 結論
讓我們了解 argparse 是什麼,以及如何實現它。
什麼是命令行界面?
命令行界面也稱為 CLI,它與命令行腳本進行交互。 Python 提供了許多允許我們使用 CLI 的庫,但是 Python argparse 是當前場景中最適合的庫。
命令行界面是如何工作的?
在深入這個主題之前,我們需要了解命令行界面是如何工作的?所以打開命令行終端,輸入 ls 命令即可獲得系統中可用文件的完整列表。
C:\Users\DEVANSH SHARMA>ls
輸出:
face.png
Favorites
file1.txt
file2.txt
flower.jpg
forest.jpg
Gow-0.8.0.exe
gradients.jpg
hadoop-2.8.0
hadoop-2.8.0.tar.gz
hello_fullstack
highway.mp4
IBA_IOAPDATA
innocentcat
IntelGraphicsProfiles
international-cricket-players-data.zip
Iris.csv
iris.zip
java_error_in_pycharm_6408.log
java_error_in_pycharm_6684.log
jtp_logo.png
linear_reg
linear_reg.zip
Links
Local Settings
main_image.jpg
mario.png
metastore_db
MicrosoftEdgeBackups
Music
My Documents
mycus
9c409ba1dd3f}.TMContainer00000000000000000001.regtrans-ms
NTUSER.DAT{42939bbc-edb6-11ea-9c24-9c409ba1dd3f}.TMContainer00000000000000000002.regtrans-ms
ntuser.ini
PySpark DataFrame.ipynb
PySpark RDD.ipynb
PySpark SQL.ipynb
PySpark UDF.ipynb
tesseract-3.02.02-win32-lib-include-dirs
tesseract-3.02.02-win32-lib-include-dirs.zip
正如我們在上面的輸出中看到的,ls 命令返回當前目錄中可用的許多文件。
現在,我們將通過在命令行中添加選項-l 來運行 ls 命令。
C:\Users\DEVANSH SHARMA>ls -l
輸出:
total 717704
drw-rw-rw- 2 DEVANSH SHARMA 0 0 2020-04-07 13:25 __pycache__
dr--r--r-- 2 DEVANSH SHARMA 0 0 2020-09-03 13:42 3D Objects
drw-rw-rw- 2 DEVANSH SHARMA 0 0 2014-01-03 15:37 8235702-a50f7c449c41b6dc8eb87d8d393eeff62121b392
drw-rw-rw- 20 DEVANSH SHARMA 0 32768 2020-12-07 16:20 Anaconda3
drw-rw-rw- 5 DEVANSH SHARMA 0 0 2020-09-03 13:02 AppData
drw-rw-rw- 2 DEVANSH SHARMA 0 8192 2021-02-11 21:39 Application Data
-rw-rw-rw- 1 DEVANSH SHARMA 0 224 2019-11-13 14:38 array.mat
-rw-rw-rw- 1 DEVANSH SHARMA 0 69548 2019-12-03 14:18 ballon.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 69548 2019-12-03 14:20 baloon.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 1857 2019-10-15 12:16 binary.png
-rw-rw-rw- 1 DEVANSH SHARMA 0 5 2020-04-01 16:46 binfile.bin
-rw-rw-rw- 1 DEVANSH SHARMA 0 13911 2019-10-16 11:52 blob.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 244879 2019-10-14 14:19 book1.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 10064 2020-04-07 16:35 calculation.py
-rw-rw-rw- 1 DEVANSH SHARMA 0 23073 2019-12-06 15:30 calibresult.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 336 2019-11-29 15:11 cat.jpeg
-rw-rw-rw- 1 DEVANSH SHARMA 0 0 2019-12-05 12:34 cat.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 13001 2019-10-13 17:22 cat_16x9.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 249726 2019-10-13 15:02 cat1.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 5633 2019-12-04 11:16 coin.jpg
-rw-rw-rw- 1 DEVANSH SHARMA 0 8652 2019-12-04 11:23 coin1.png
-rw-rw-rw- 1 DEVANSH SHARMA 0 59918 2020-03-02 11:22 comic.png
dr--r--r-- 2 DEVANSH SHARMA 0 0 2020-09-03 13:42 Contacts
Python 中的 argparse 是什麼?
Python argparse 是一個命令行解析模塊,建議使用命令行參數。該模塊於 2011 年 2 月 20 日作為 Python 標準庫的一部分發布。
它類似於 getopt
模塊 ,但使用起來略顯吃力,執行同樣的任務需要更多的代碼行。然而,argparse 模塊是 Python getopt 和 optparse 模塊的更好替代。它提供了以下幾個重要特性。
- 它允許我們使用位置參數。
- 它允許我們自定義前綴字符。
- 它支持單個選項的可變參數數量。
- 它支持子命令。
如何實現 argparse 庫來創建命令行界面?
讓我們看下面這個簡單的例子來理解 Python 中 argparse 模塊的工作原理。
示例- 在下面的示例中,我們使用arg parse模塊創建了一個簡單的 Python 程序來執行添加操作。我們將通過命令行界面傳遞參數。
# importing argparse module
import argparse
parser = argparse.ArgumentParser()
# creating two variables using the add_argument method
parser.add_argument("num1", help = "first number")
parser.add_argument("num2", help = "second number")
parser.add_argument("operation", help = "operation")
我們已經導入了 argparse 模塊,並創建了一個簡單的解析器,將在整個程序中使用。我們調用了 add_argument() 方法,傳遞了兩個參數- num1 和 help。我們已經將上述代碼保存在名為 code.py. 的文件中
為了運行這個程序,我們打開命令行界面並運行上面的文件。
命令
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py
當我們按回車鍵時,它將顯示以下輸出。
輸出:
usage: code.py [-h] num1 num2 operation
code.py: error: the following arguments are required: num1, num2, operation
正如我們所看到的,它顯示了錯誤,因為我們沒有傳遞所需的參數。
現在,我們將傳遞可選參數- h,它基本上用於幫助。
命令
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py -h
它將顯示以下輸出。
usage: code.py [-h] num1 num2 operation
positional arguments:
num1 first number
num2 second number
operation operation
optional arguments:
-h, --help show this help message and exit
我們得到了在 Python 程序中定義的所有參數列表。現在,我們將通過添加以下操作來打印參數和操作。當我們執行時。parse_args(),我們得到一個 Namespace 對象,它包含從命令行接收的每個輸入參數的簡單屬性。
args = parser.parse_args()
print(args.num1)
print(args.num2)
print(args.operation)
我們使用 args 變量將參數打印到控制台。默認情況下,它接受輸入,因此我們需要將其類型轉換為整數。
n1 = int(args.num1)
n2 = int(args.num2)
為了將這兩個數字相加,我們在代碼中定義了加法操作。
result = n1 + n2
print("The Result is : ",result)
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py 20 30 add
20
30
add
The Result is : 50
示例- 1 使用 argparse 的簡單計算器程序
# importing argparse module
import argparse
parser = argparse.ArgumentParser()
# creating two variables using the add_argument method
parser.add_argument("num1", help = "first number")
parser.add_argument("num2", help = "second number")
parser.add_argument("operation", help = "operation")
args = parser.parse_args()
print(args.num1)
print(args.num2)
print(args.operation)
n1 = int(args.num1)
n2 = int(args.num2)
if args.operation == "add":
result = n1 + n2
print("The Result is : ",result)
elif args.operation == "sub":
result = n1 - n2
elif args.operation == "mul":
result = n1 * n2
elif args.operation == "div":
result = n1 / n2
else:
print("Unmatched Argument")
print("result is : ",result)
輸出:
命令行界面中的參數類型
我們可以向命令行界面相加兩個參數。
- 位置參數
- 可選參數
讓我們理解這兩個論點。
位置參數- 位置參數是我們在命令中用來操作的參數類型。我們將參數傳遞給命令並執行一些操作。它們的位置由它們的功能決定。這就是為什麼它們被稱為位置論證。
默認情況下,位置參數被視為字符串,但是我們可以在其他數據類型中進行類型轉換。
在前面的示例中,我們使用了位置參數來執行兩個數字之間的相加操作。
讓我們理解下面的代碼。
示例- 1
import argparse
parser = argparse.ArgumentParser()
# By default, it treats input number as string
parser.add_argument('num', help="Enter nmber to get square of it.")
args = parser.parse_args()
print(args.num**2)
輸出:
我們已經傳遞了 15,它返回了 1515,因為 argparse 被視為字符串。我們可以使用 type 屬性來糾正這一點。
示例-
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('num', help="Enter number to get square of it.", type = int)
args = parser.parse_args()
print(args.num**2)
輸出:
現在,我們得到了想要的結果。
可選參數- 可選參數不是必需的。如果不傳遞給腳本,我們將不會得到錯誤。這些類型的參數以-單破折號或“-”雙破折號前綴開始。我們需要打電話給。add_parse() 傳遞可選參數。
讓我們理解下面的例子。
示例-
# importing argparse module
import argparse
parser = argparse.ArgumentParser()
# creating two variables using the add_argument method
parser.add_argument("--num1", help = "first number")
parser.add_argument("--num2", help = "second number")
parser.add_argument("--operation", help = "operation")
args = parser.parse_args()
print(args.num1)
print(args.num2)
print(args.operation)
n1 = int(args.num1)
n2 = int(args.num2)
if args.operation == "add":
result = n1 + n2
print("The Result is : ",result)
elif args.operation == "sub":
result = n1 - n2
elif args.operation == "mul":
result = n1 * n2
elif args.operation == "div":
result = n1 / n2
else:
print("Unmatched Argument")
print("result is : ",result)
當我們在不傳遞任何參數的情況下運行上述代碼時,它將顯示以下輸出。
輸出:
正如我們在上面的代碼中看到的,我們在沒有傳遞任何可選參數的情況下運行了腳本,它沒有返回錯誤,而是返回 none 。可選參數的幫助消息和數據類型與位置參數中的相同。
Python 參數解析位置參數
有時,我們需要在執行時在腳本中強制傳遞的參數。讓我們看一個它沒有通過的例子。
示例-
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("example")
args = parser.parse_args()
if args.example == 'Hello Python':
print('Welcome to Javatpoint')
else:
print("Didn't make it!")
當我們使用不同的參數運行上述代碼時,它將顯示以下參數。
輸出:
如果參數沒有在命令行終端中傳遞,我們可以顯示錯誤。
Python 參數解析位置參數默認值
我們可以使用 argparse 模塊為變量或參數提供默認值。在前面的示例中,位置參數值在未提供時為空。讓我們理解下面的例子。
示例-
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("example", default = "Hello How are you")
args = parser.parse_args()
if args.example == 'Hello':
print('Welcome to Javatpoint')
else:
print("Didn't make it!")
輸出:
將簡稱用作可選參數
傳遞許多可選參數會使我們的 Python 腳本變長。因此,我們也可以為參數指定簡稱。我們可以給參數取縮寫名;這將有助於我們保持 Python 腳本的簡短。
讓我們理解下面的例子。
示例-
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-tut', '--tutorial', help="Best Tutorial ")
parser.add_argument('-w', '--writer', help="Technical Content")
args = parser.parse_args()
if args.tutorial == 'Javatpoint':
print('Congratulation|| You made it!')
if args.writer == 'Devansh':
print('Technical Writer.')
輸出:
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py -w Devansh
Technical Writer.
在上面的代碼中,我們為兩個可選參數都指定了縮寫。我們可以用它的簡稱來訪問它。
用 argparse 組合可選參數和位置參數
我們可以使用 argparse 組合可選參數和位置參數,如下所示。讓我們理解下面的例子。
示例-
import argparse
parser = argparse.ArgumentParser()
# positionl Argument
parser.add_argument('tutorial', help="Best Tutorial ")
# optional argument
parser.add_argument('-w', '--writer', help="Technical Content")
args = parser.parse_args()
if args.tutorial == 'Javatpoint':
print('You made it!')
if args.writer == 'Devansh':
print('Technical Writer.')
輸出:
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py Javatpoint -w Devansh
You made it!
Technical Writer.
我們已經將這兩種類型的參數傳遞給了命令行,並獲得了上面的輸出。
結論
到目前為止,我們已經討論了 argparse Python 模塊的非常重要的概念。我們已經學習了如何創建它們,以及如何通過命令行界面使用它們。我們還了解了 argparse 模塊是什麼,以及為什麼用 Python 編寫命令行腳本很重要。
該模塊幫助我們創建自解釋程序,並為用戶提供與我們的應用交互的方法。
原創文章,作者:FZAAJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/324786.html