Python中的argparse

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是一个命令行解析模块,推荐与命令行参数一起使用。该模块于2011年2月20日作为Python标准库的一部分发布。

它类似于 getopt模块 ,但使用起来稍微有些困难,并且需要更多的代码行来完成相同的任务。然而,argparse模块是 Python getopt和optparse模块的更好替代品 。它提供了一些重要的功能,如下所示。

  • 它允许我们使用位置参数。
  • 它允许我们自定义前缀字符。
  • 它支持单个选项的可变数量的参数。
  • 它支持子命令。

如何使用argparse库来创建一个命令行接口

让我们看下面的简单示例,以了解argparse模块在Python中的工作原理。

示例 在以下示例中,我们创建一个简单的Python程序,使用 argparse模块 执行”add”操作。我们将通过命令行接口传递参数。

# 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

示例使用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)

输出:

Python中的argparse

命令行界面中的参数类型

在命令行界面中,我们可以添加两种参数。

  • 位置参数
  • 可选参数

让我们来了解一下这两种参数。

位置参数 – 位置参数是我们在命令中使用的参数类型,用于操作。我们将参数传递给命令并执行一些操作。它们的位置由其功能定义。这就是为什么它们被称为位置参数。

默认情况下,位置参数被视为字符串,但我们可以将其转换为其他数据类型。

在之前的示例中,我们使用了位置参数来执行两个数字之间的加法运算。

让我们来了解一下以下代码。

示例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)

输出:

Python中的argparse

我们已经通过了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)

输出:

Python中的argparse

现在,我们得到了期望的结果。

可选参数 – 可选参数不是必须的。如果没有传递给脚本,我们不会得到错误。这些类型的参数是以单破折号 – 或双破折号 — 作为前缀开始的。我们需要调用 .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)

当我们运行上述代码时,不传递任何参数,将显示以下输出。

输出:

Python中的argparse

如上所示是我们运行脚本而不传递任何可选参数的代码,在没有返回错误的情况下返回 none . 可选参数的帮助信息和数据类型与位置参数相同。

Python argparse 位置参数

有时候,我们需要在执行脚本时传递必须的参数。让我们看一个示例,假如没有传递这些参数。

示例

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

如果在命令行终端中没有传入参数,我们可以显示错误。

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 Javatpoint')
else:
    print("Didn't make it!")

输出:

Python中的argparse

使用缩写名称作为可选参数

传递许多可选参数可能会使我们的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.   

在上述代码中,我们为两个可选参数分别分配了short。我们可以通过使用其短名称来访问它。

使用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中编写命令行脚本非常重要。

这个模块帮助我们创建自解释的程序,并为用户提供与我们的应用程序交互的手段。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程