Python教程-Python中的argparse模块
在本文中,我们将学习Python中的argparse模块。我们将探讨其工作原理和功能。这对于初级开发人员、工程师和计算机科学家来说是一个非常重要的主题。正如我们都知道,Python以其丰富的库而闻名。如果开发人员编写用于命令行的脚本,那么他/她还需要传递命令行参数,我们可以使用argparse库来创建这些参数。
在本文中,我们将探讨与argparse相关的以下主题。
- 什么是命令行界面?
- Python中的argparse是什么?
- 如何使用Python argparse库创建命令行界面?
- 命令行界面中的参数类型
- Python argparse位置参数
- Python argparse位置参数的默认值
- 使用可选参数的短名称
- 用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是一个命令行解析模块,建议用于处理命令行参数。这个模块作为Python标准库的一部分于2011年2月20日发布。
它类似于getopt模块,但稍微难以使用,需要更多的代码行来执行相同的任务。然而,argparse模块是Python getopt和optparse模块的更好替代品。它提供了一些重要的功能,如下所示。
- 它允许我们使用位置参数。
- 它允许我们自定义前缀字符。
- 它支持单个选项的可变数量参数。
- 它支持子命令。
如何实现argparse库创建命令行界面?
让我们看一个简单的示例来了解Python中argparse模块的工作方式。
示例 - 在以下示例中,我们创建一个简单的Python程序,使用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")
我们导入了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将其视为字符串。我们可以使用类型属性来更正这一点。
示例 -
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 argparse位置参数
有时,我们需要在执行脚本时强制要求传递参数。让我们看一个示例,如果没有传递参数,它将会如何。
示例 -
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("example")
args = parser.parse_args()
if args.example == 'Hello Python':
print('Welcome to Javatiku')
else:
print("Didn't make it!")
当我们以不同的参数运行上述代码时,它将显示以下参数。
输出:
如果在命令行界面上没有传递参数,我们可以显示错误。
Python argparse位置参数默认值
我们可以使用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 javajitu')
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 == 'Javatiku':
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将可选参数和位置参数组合在一起
如果我们想在脚本中使用可选参数和位置参数,则我们可以将它们组合在一起。让我们看一个示例。
示例 -
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 == 'Javatiku':
print('You made it!')
if args.writer == 'Devansh':
print('Technical Writer.')
输出:
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py Javatiku -w Devansh
You made it!
Technical Writer.
在上述示例中,我们使用了位置参数和可选参数。我们传递两个数字和操作。该程序将执行指定的操作并返回结果。
结论
在本文中,我们学习了如何使用Python argparse库来创建命令行界面。我们了解了位置参数和可选参数的概念,以及如何将它们组合在一起来处理不同类型的命令行参数。使用argparse库,我们可以轻松地为Python脚本添加命令行界面,从而使我们的脚本更加灵活和易于使用。希望这篇文章对你有所帮助!如果你有任何问题或建议,请随时提出。