当前位置:首页>python>每天10分钟玩转Python基础篇 - argparse 命令行工具

每天10分钟玩转Python基础篇 - argparse 命令行工具

  • 2026-09-08 21:23:55
每天10分钟玩转Python基础篇 - argparse 命令行工具

PYTHON · 基础篇第6课2026.08

脚本只会傻跑,不能接参数?

给你的脚本,加命令行接口

argparse · 命令行参数

📦 3 PARTS + CONCLUSION

👉 滑动

PART 01

通俗原理

参数翻译官

PART 02

完整代码

6 步实操

PART 03

踩坑总结

5 个常见坑

PART ///

写在最后

小结自检

这是基础篇第6篇。前面我们学了变量、循环、字符串,还有列表、元组、字典、集合。今天学一个很实用的东西:怎么让你的 Python 脚本像正经命令行工具一样,能接收参数、显示帮助、报错提示。

你有没有在命令行里敲过 git commit -m "xxx"、pip install requests 这样的命令?它们后面跟着的 -m、install 这些就是“命令行参数”。学会 argparse 之后,你自己写的脚本也能这样用——别人用你的脚本时,敲个 --help 就能看到用法,传错参数会自动报错。

今天我们不空谈,直接做一个真实的小工具:统计文本文件里有多少个单词。从最笨的硬编码写法,一步步升级成一个专业的命令行工具。

01

前置知识

PREREQUISITES · 准备什么

✅

会用 uv run python 文件名.py 运行脚本(第3篇讲过)。

✅

会定义函数(第2篇的 def)。

✅

了解列表和字典(第5篇刚学的)。

02

通俗原理

CONCEPTS · 参数翻译官

argparse 是 Python 自带的“命令行参数翻译官”。它做的事很简单:你告诉它“我这个程序要接收哪些参数”,它负责从命令行读参数、检查对不对、把结果整理好交给你。参数错了它会自动报错,还会自动生成 --help 帮助。

参数分两种:

📍

位置参数:必须按顺序出现,比如 python 脚本.py 文件名 里的“文件名”。

🔧

可选参数:用 - 或 -- 开头,可以不传,比如 --min-len 3。

记住一句话:位置参数必填,可选参数带杠。

03

完整代码

CODE · 6 步实操

STEP 01

最简版本:接收一个位置参数

python

import argparse

parser=argparse.ArgumentParser()

parser.add_argument("echo")# 定义一个叫 echo 的位置参数

args=parser.parse_args()# 解析命令行参数

print(args.echo)# 打印这个参数的值

add_argument("echo") 就是告诉 argparse:“我要一个位置参数,名叫 echo”。parse_args() 把命令行读到的值装进 args.echo。

STEP 02

加上 help 帮助

python

import argparse

parser=argparse.ArgumentParser(description="回显输入的文本")

parser.add_argument("echo",help="要回显的文本")

args=parser.parse_args()

print(args.echo)

usage: demo.py [-h] echo

回显输入的文本

positional arguments:

  echo        要回显的文本

options:

  -h, --help  show this help message and exit

看到了吗?--help 是 argparse 免费送的,不用你自己写。

STEP 03

可选参数:布尔 flag

python

import argparse

parser=argparse.ArgumentParser()

parser.add_argument("--verbose",action="store_true",help="增加输出详细度")

args=parser.parse_args()

ifargs.verbose:

print("详细模式已开启")

else:

print("普通模式")

action="store_true" 的意思是:只要命令里出现了 --verbose,args.verbose 就是 True,没出现就是 False。

STEP 04

type 自动转换

python

import argparse

parser=argparse.ArgumentParser()

parser.add_argument("square",type=int,help="要平方的数字")

args=parser.parse_args()

print(args.square**2)

命令行传进来的参数默认都是字符串,type=int 让它自动转成数字。运行 uv run python demo.py 5,输出 25。

STEP 05

choices 限定取值

python

import argparse

parser=argparse.ArgumentParser()

parser.add_argument("--color",choices=["red","green","blue"])

args=parser.parse_args()

print(args.color)

如果传 --color yellow,argparse 会直接报错:“invalid choice: ‘yellow’”。

STEP 06

实战——文件单词统计工具

现在把学到的串起来,做一个真正的工具——统计文本文件里有多少个单词,还能按长度过滤、忽略大小写:

python

import argparse

import os

defcount_words(filename,min_len=0,ignore_case=False):

ifnotos.path.exists(filename):

returnf"错误:文件 {filename} 不存在"

withopen(filename,encoding="utf-8")asf:

words=f.read().split()

ifignore_case:

words=[w.lower()forwinwords]

ifmin_len>0:

words=[wforwinwordsiflen(w)>=min_len]

returnlen(words)

parser=argparse.ArgumentParser(description="统计文本文件中的单词数量")

parser.add_argument("file",help="要统计的文件路径")

parser.add_argument("-m","--min-len",type=int,default=0,help="单词最小长度")

parser.add_argument("-i","--ignore-case",action="store_true",help="忽略大小写")

args=parser.parse_args()

result=count_words(args.file,args.min_len,args.ignore_case)

print(result)

这个工具现在支持:file 位置参数、-m/--min-len 可选参数(默认 0)、-i/--ignore-case 开关。

04

运行结果

RESULTS · 实测输出

所有代码我都用 Python 3.14 实际跑过,关键输出和上面完全一致。

05

踩坑总结

PITFALLS · 5 个常见坑

1. 位置参数和可选参数别搞混:add_argument("echo") 是位置参数(必填),add_argument("--echo") 是可选参数(可不填)。少了两个杠,行为完全不一样。

2. --verbose 配合 action="store_true":如果只写 add_argument("--verbose") 而不加 action,它会要求你后面跟一个值。

3. type=int 才会转数字:命令行传进来的默认是字符串,想算数必须加 type=int,否则 "5" ** 2 会报 TypeError。

4. 单个字母用单杠,多个字母用双杠:-m 是短选项,--min-len 是长选项,两者可以同时定义(-m, --min-len)。

5. 参数出错会自动退出:缺少必填参数、传了非法 choices,argparse 会自动打印错误并让程序退出(退出码 2),不用你自己写一堆 if 判断。

06

进阶拓展

NEXT · 还能怎么玩

💡

subparser 子命令:像 git commit、git push 这种“一个命令带多个子动作”的,可以用 add_subparsers()。

💡

nargs='+' 接收多个值:比如 python demo.py 1 2 3 一次传三个数字。

💡

自定义 action 类:需要特殊处理参数时,可以继承 argparse.Action 写自己的动作。

///

写在最后

SUMMARY · 小结自检

今天学会用 argparse 给脚本装上了“命令行接口”。总结一下核心:

用法
写法
作用
位置参数
add_argument("name")
必填,按位置取值
可选参数
add_argument("--name")
可不填,用 -- 前缀
布尔开关
action="store_true"
出现即为 True
类型转换
type=int
自动转成数字
限定取值
choices=[...]
只能从列表里选
默认值
default=0
不传时用默认值

自检一下:能写出一个带 --help 的脚本吗?能让位置参数自动转成数字吗?能加一个 --verbose 开关吗?都行的话,你已经有能力把脚本升级成正经的命令行工具了。

既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。

点赞
在看
转发

THANKS FOR READING

最新文章

随机文章