注册

详解sys.argv(获取命令行参数)属性的使用方法

Python 的 sys.argv 属性是一个保存命令行参数的列表,它可以让我们在运行 Python 程序时直接将参数传入,并且可以通过修改这个列表来控制程序的行为,下面是有关 sys.argv 的详细讲解。

使用方法

我们可以通过导入 sys 模块来使用 sys.argv,这个模块提供了一个名为 argv 的列表,保存了命令行中传递的所有参数。在代码中可以通过 sys.argv[i] 来获取第 i 个参数的值,其中 i 从 0 开始计数,也就是说 sys.argv[0] 存储的是 Python 脚本本身的名称。

下面是一个简单的示例代码:

import sys
print("命令行参数有:", str(sys.argv))
for i in range(len(sys.argv)):
    print("第", i, "个参数:", sys.argv[i])

运行这段代码的结果会像这样:

命令行参数有: ['test_arg.py', 'arg1', 'arg2', 'arg3']
第 0 个参数: test_arg.py
第 1 个参数: arg1
第 2 个参数: arg2
第 3 个参数: arg3

从输出结果可以看出,sys.argv 中存储的是字符类型的数组,可以通过下标来获取每个参数的值。

实例说明

下面给出两个实例,说明 sys.argv 在实际应用中的作用。

实例一

假设我们有一个程序需要读取一个文件名,并且对文件进行操作,这时候我们可以使用 sys.argv 来避免在代码中写死文件名。

比如下面这个示例程序:

import sys

if len(sys.argv) < 2:
   print("请在命令行输入文件名")
   sys.exit()

file_name = sys.argv[1]
try:
    with open(file_name, "r") as f:
        content = f.read()
except:
    print("文件不存在或无法打开")
    sys.exit()

# 对文件进行操作...

这个程序会从命令行中读取文件名,如果没有输入文件名,则提示用户需要在命令行中输入文件名,如果存在文件,则对文件进行操作。

实例二

假设我们需要用 Python 脚本执行某个外部命令,并且传递一些参数给命令,这时候我们可以使用 argparse 来解析命令行参数,并将其转换为 Python 中的变量,然后传递给需要执行的命令。

比如下面这个示例程序:

import sys
import argparse
from subprocess import call

parser = argparse.ArgumentParser(description='执行一个外部命令')
parser.add_argument('--cmd', type=str, help='命令名称', required=True)
parser.add_argument('--arg1', type=str, help='命令参数1', default=None)
parser.add_argument('--arg2', type=str, help='命令参数2', default=None)
args = parser.parse_args()

command = [args.cmd]
if args.arg1 is not None:
    command.append(args.arg1)
if args.arg2 is not None:
    command.append(args.arg2)

call(command)

这个程序使用 argparse 库来解析命令行参数,然后将参数传递给需要执行的命令。例如我们执行下面的命令:

python test_arg.py --cmd echo --arg1 "Hello World" --arg2 "from Python"

这个程序会执行 echo 命令,并将参数 "Hello World" 和 "from Python" 传递给这个命令,打印出 "Hello World from Python"。