Python 中的 argparse

2025年3月17日 | 阅读 8 分钟

在本文中,我们将学习 Python 中的 argparse 模块。我们将探讨它的工作原理和功能。对于基础开发人员、工程师和计算机科学家来说,这是一个非常重要的主题。正如我们所熟知的,Python 以其丰富的库而闻名。如果开发人员为命令行编写脚本,他们还需要传递命令行参数,这些参数我们可以使用 **argparse** 库来创建。

在本文中,我们将探讨与 argparse 相关的以下主题。

  • 什么是命令行界面?
  • Python 中的 argparse 是什么?
  • 如何实现 Python argparse 库来创建命令行界面?
  • 命令行界面参数的类型
  • Python argparse 位置参数
  • Python argparse 位置参数默认值
  • 为可选参数使用短名称
  • 将可选参数和位置参数与 argparse 结合使用
  • 结论

让我们来理解 argparse 是什么以及如何实现它。

什么是命令行界面?

命令行界面也称为 CLI,它与命令行脚本进行交互。 Python 提供了许多允许我们使用 CLI 的库,但在当前情况下,Python argparse 是最合适的库。

命令行界面如何工作?

在我们深入研究这个主题之前,我们需要了解命令行界面是如何工作的?所以打开命令行终端并输入 **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** 命令。

输出

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 模块的工作原理。

**示例 -** 在以下示例中,我们创建一个简单的 Python 程序,使用 **argparse** 模块执行加法运算。我们将通过命令行界面传递参数。

我们导入了 argparse 模块,并创建了一个简单的解析器,将在整个程序中使用。我们调用了 **add_argument()** 方法并传递了两个参数 - **num1 和 help**。我们将上述代码保存在名为 **_code.py_** 的文件中。

要运行此程序,我们打开命令行界面并运行上述文件。

命令

当我们按下 Enter 键时,它将显示以下输出。

输出

usage: code.py [-h] num1 num2 operation
code.py: error: the following arguments are required: num1, num2, operation

正如我们所见,它显示错误,因为我们没有传递必需的参数。

现在,我们将传递可选参数 - 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 变量将参数打印到控制台。默认情况下,它将输入视为字符串,因此我们需要将其转换为整数。

为了将这两个数字相加,我们在代码中定义了加法运算。


C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py 20 30 add
20
30
add
The Result is :  50

示例 - 1 使用 argparse 的简单计算器程序

输出

The argparse in Python

命令行界面的参数类型

我们可以向命令行界面添加两种类型的参数。

  • 位置参数
  • 可选参数

让我们来理解这两个参数。

**位置参数 -** 位置参数是我们用于操作的命令行参数类型。我们将参数传递给命令并执行某些操作。它们的位置由其功能定义。因此,它们被称为位置参数。

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

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

让我们来理解以下代码。

示例 - 1

输出

The argparse in Python

我们传递了 15,它返回 1515,因为 argparse 将其视为字符串。我们可以使用 type 属性来纠正这一点。

示例 -

输出

The argparse in Python

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

**可选参数 -** 可选参数不是必需的。如果我们不将它们传递给脚本,我们不会收到错误。这些类型的参数以 - 单虚线或 "--" 双虚线前缀开头。我们需要调用 **.add_parse()** 来传递可选参数。

让我们理解下面的例子。

示例 -

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

输出

The argparse in Python

正如我们在上面的代码中看到的,我们运行了脚本而没有传递任何可选参数,它返回 **None** 而不是返回错误。对于可选参数,帮助消息和数据类型与位置参数相同。

Python argparse 位置参数

有时,我们需要在执行时强制将参数传递给脚本。让我们看一个未传递参数的示例。

示例 -

当我们使用不同的参数运行上述代码时,它将显示以下参数。

输出

The argparse in Python

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

Python argparse 位置参数默认值

我们可以使用 argparse 模块为变量或参数提供默认值。在前面的示例中,当未提供位置参数值时,它是空的。让我们来理解以下示例。

示例 -

输出

The argparse in Python

为可选参数使用短名称

传递许多可选参数可能会使我们的 Python 脚本变长。因此,我们也可以为参数分配短名称。我们可以为参数指定缩写名称;这将帮助我们保持 Python 脚本的简洁。

让我们理解下面的例子。

示例 -

输出

C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py -w Devansh
Technical Writer.	

在上面的代码中,我们为两个可选参数都分配了短名称。我们可以使用其短名称来访问它。

将可选参数和位置参数与 argparse 结合使用

我们可以使用 argparse 如下方式组合可选参数和位置参数。让我们来理解以下示例。

示例 -

输出

C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py Javatpoint -w Devansh
You made it!
Technical Writer.

我们将两种类型的参数都传递给了命令行,并获得了上述输出。

结论

到目前为止,我们已经讨论了 argparse Python 模块的所有重要概念。我们已经学习了如何创建它们以及如何通过命令行界面使用它们。我们还学习了 argparse 模块是什么,以及为什么它对于编写 Python 中的命令行脚本很重要。

该模块有助于我们创建自解释型程序,并为用户提供与我们的应用程序交互的手段。


下一主题Python tqdm 模块