在Python中,sys.argv是用来获取命令行启动参数最直接的方式。只要导入sys模块,就能通过sys.argv这个列表拿到用户输入的内容。它把脚本名本身作为第一个元素,后面才是真正传进来的参数。

sys.argv的基本结构
当你在终端执行下面这条命令时:
python demo.py hello 123
在demo.py里,sys.argv的值会是:
import sys # sys.argv内容为 ['demo.py', 'hello', '123'] print(sys.argv) print(sys.argv[0]) # 脚本名 demo.py print(sys.argv[1]) # 第一个参数 hello print(sys.argv[2]) # 第二个参数 123
可以看到,sys.argv[0]永远是脚本路径或名字,真实参数从索引1开始。
常见错误与解析
错误一:忘记参数导致索引越界
如果用户没传够参数,直接取sys.argv[1]会抛出IndexError。应先判断长度:
import sys
if len(sys.argv) < 2:
print('用法: python demo.py 名称')
sys.exit(1)
name = sys.argv[1]
print('你好, ' + name)错误二:参数都是字符串需手动转换
sys.argv里所有元素都是字符串,做数学运算前要转成int或float:
import sys
try:
num = int(sys.argv[1])
except IndexError:
print('请传入一个数字')
sys.exit(1)
except ValueError:
print('参数必须是数字')
sys.exit(1)
print('平方是', num * num)错误三:带空格的参数未加引号
在命令行里如果参数含空格,要用双引号包起来,否则会被拆成多个元素:
python demo.py "hello world"
此时sys.argv[1]才是完整的hello world。
简单参数解析封装
当参数变多,可以用一个小函数统一处理:
import sys
def get_args(expected=0):
args = sys.argv[1:]
if len(args) < expected:
raise SystemExit('参数不足,需要 ' + str(expected) + ' 个')
return args
if __name__ == '__main__':
items = get_args(2)
print('收到参数:', items)这样在写工具脚本时,不容易因为漏传参数而崩溃。对于更复杂的场景,建议后续了解argparse模块,但理解sys.argv是第一步。