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

  • Post category:Python

sys.argv 是 Python 内置模块 sys 中的一个属性,用于获取命令行参数,并以列表形式返回。其中,第一个参数是脚本的名称,从第二个参数开始才是真正的命令行参数。

我们可以将 sys.argv 用于控制台程序,获取用户输入的参数,从而做出不同的处理。

下面我将详细讲解 sys.argv 的使用方法和注意事项。

使用方法

  1. 在程序中导入 sys 模块。

python
import sys

  1. 使用 sys.argv 获取命令行参数。

    python
    def main():
    # 获取命令行参数
    arguments = sys.argv
    print(arguments)

在上面的例子中,调用 main() 函数后,程序将打印出包含所有命令行参数的列表。

bash
$ python script.py arg1 arg2 arg3
['script.py', 'arg1', 'arg2', 'arg3']

  1. 使用命令行参数做出不同的处理。

python
def main():
# 获取命令行参数
arguments = sys.argv
if len(arguments) == 1:
print('没有传入参数')
else:
arg = arguments[1]
if arg == 'hello':
print('Hello, World!')
elif arg == 'bye':
print('Goodbye, World!')
else:
print('未知的参数')

在上面的例子中,根据命令行传入的第二个参数做出不同的处理。

bash
$ python script.py hello
Hello, World!
$ python script.py bye
Goodbye, World!
$ python script.py unknow
未知的参数

注意事项

  1. 使用 sys.argv 时,应该确保命令行参数的数量足够,否则会引发 IndexError 异常。

  2. sys.argv 中包含的命令行参数都是字符串类型,需要进行类型转换后再进行相关处理。

  3. 命令行参数中含有空格等特殊字符时,需要注意对参数进行处理,防止出现意外情况。

实例说明

实例 1:计算器程序

下面是一个简单的计算器程序,接收两个数字和一个运算符作为命令行参数,并计算出结果。

import sys

def main():
    # 获取命令行参数
    arguments = sys.argv
    if len(arguments) != 4:
        print('Usage: python calculator.py <num1> <operator> <num2>')
        return
    num1 = int(arguments[1])
    operator = arguments[2]
    num2 = int(arguments[3])
    # 根据运算符计算结果
    if operator == '+':
        result = num1 + num2
    elif operator == '-':
        result = num1 - num2
    elif operator == 'x':
        result = num1 * num2
    elif operator == '/':
        result = num1 / num2
    else:
        print('Unsupported operator:', operator)
        return
    # 打印结果
    print('Result:', result)

if __name__ == '__main__':
    main()

在命令行中执行:

$ python calculator.py 2 + 3
Result: 5

实例 2:批量处理文件名

下面是一个简单的脚本,用于将指定目录下的所有文件名中的指定字符替换为新的字符。

import sys
import os

def main():
    # 获取命令行参数
    arguments = sys.argv
    if len(arguments) != 4:
        print('Usage: python replace.py <dir> <old_str> <new_str>')
        return
    dirname = arguments[1]
    old_str = arguments[2]
    new_str = arguments[3]
    # 遍历目录下的所有文件名
    for filename in os.listdir(dirname):
        new_filename = filename.replace(old_str, new_str)
        if new_filename != filename:
            os.rename(os.path.join(dirname, filename), os.path.join(dirname, new_filename))
    print('Replace finished.')

if __name__ == '__main__':
    main()

在命令行中执行:

$ python replace.py ./dir old new
Replace finished.

上面的命令将 ./dir 目录下所有文件名中的 old 替换为 new