使用 Python 解析命令行参数

Vaibhav Vaibhav 2022年5月17日
使用 Python 解析命令行参数

在从命令行或 shell 运行 Python 程序时,我们可以将值以字符串的形式、技术上、参数或选项传递给程序。程序可以访问这些值并执行它,甚至使用这些值进行计算。

本文将讨论我们如何使用 Python 解析这些命令行参数并使用它们。

使用 optparse 模块解析命令行参数

optparse 模块是一个灵活方便的 Python 包,用于解析命令行选项。它内置于标准 Python 中。它使用声明式方法来解析命令行选项。要使用这个包,我们首先必须创建一个 OptionParser 类的对象,然后在 add_option() 方法的帮助下添加有关可能选项或参数的详细信息。add_option() 方法接受诸如 option(选项名称)、type(选项的数据类型)、help(选项的帮助文本)和 default(选项名称)等参数。选项的默认值(如果未在命令中指定)。要以字典的形式从命令行命令获取选项及其值,我们可以使用 parse_args() 方法。

让我们通过一个例子更好地理解这个库的使用。我们将实现一个简单的 Python 程序,该程序将检查三个选项:-a-b-c。这里,-a-b 代表操作数,+ 是运算符,而 -c 本质上是目标和。此外,代码将检查这些值,如果在命令行命令中找不到值,则为它们分配 0 值,最后,检查 a + b 是否等于 c。此外,它还将以格式良好的字符串打印结果。

import optparse

parser = optparse.OptionParser()
parser.add_option(
    "-a",
    help = "First Number", 
    default = 0
)
parser.add_option(
    "-b",
    help = "Second Number", 
    default = 0
)
parser.add_option(
    "-c",
    help = "Sum", 
    default = 0
)
options, args = parser.parse_args()
a = int(options.a)
b = int(options.b)
c = int(options.c)
s = a + b
print(f"{a} + {b} = {s} and {s} {'==' if s == c else '!='} {c}")

下面简单解释一下上面的代码。首先,它创建一个 OptionParser() 类对象并添加有关三个目标选项的信息; -a-b-c。然后它遍历命令行或 shell 命令来检查所需的选项。最后,它将所有值存储在单独的变量中,计算总和或 a + b,并将其与目标总和或 c 进行比较。

让我们针对以下命令测试该程序。

python main.py -a 1 -b 2 -c 3
python main.py -a 1
python main.py -b 2
python main.py -c 3
python main.py 1 2 3
python main.py -a 1 2 3
python main.py 1 -b 2 3
python main.py 1 2 -c 3
python main.py 0 0 0
python main.py

输出:

1 + 2 = 3 and 3 == 3
1 + 0 = 1 and 1 != 0
0 + 2 = 2 and 2 != 0
0 + 0 = 0 and 0 != 3
0 + 0 = 0 and 0 == 0
1 + 0 = 1 and 1 != 0
0 + 2 = 2 and 2 != 0
0 + 0 = 0 and 0 != 3
0 + 0 = 0 and 0 == 0
0 + 0 = 0 and 0 == 0

从输出中,我们可以推断当没有向命令行或 shell 命令提供关键字选项或参数时,会考虑默认值。请参阅除第一个之外的测试命令(python main.py -a 1 -b 2 -c 3)以获得更好的分析。

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

LinkedIn GitHub