sys.argv
是 Python 内置模块 sys
中的一个属性,用于获取命令行参数,并以列表形式返回。其中,第一个参数是脚本的名称,从第二个参数开始才是真正的命令行参数。
我们可以将 sys.argv
用于控制台程序,获取用户输入的参数,从而做出不同的处理。
下面我将详细讲解 sys.argv
的使用方法和注意事项。
使用方法
- 在程序中导入
sys
模块。
python
import sys
-
使用
sys.argv
获取命令行参数。python
def main():
# 获取命令行参数
arguments = sys.argv
print(arguments)
在上面的例子中,调用 main()
函数后,程序将打印出包含所有命令行参数的列表。
bash
$ python script.py arg1 arg2 arg3
['script.py', 'arg1', 'arg2', 'arg3']
- 使用命令行参数做出不同的处理。
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
未知的参数
注意事项
-
使用
sys.argv
时,应该确保命令行参数的数量足够,否则会引发IndexError
异常。 -
sys.argv
中包含的命令行参数都是字符串类型,需要进行类型转换后再进行相关处理。 -
命令行参数中含有空格等特殊字符时,需要注意对参数进行处理,防止出现意外情况。
实例说明
实例 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
。