用 argparse 给 Python 小脚本加命令行参数:不用改代码就能换输入

举报
你永远是我的寶貝 发表于 2026/11/06 17:32:14 2026/11/06
【摘要】 新手写 Python 小脚本时,经常会把要处理的文件名、要重复的次数直接写进代码里。比如统计一个文本文件有多少行,路径写成 notes.txt,下次想统计别的文件,就要打开代码改一行、再保存、再运行。改得多了,还容易顺手改错别的地方。更省事的办法是把这些会变的东西变成“命令行参数”:运行脚本时在后面带上,脚本读到什么就处理什么,代码本身不用动。Python 标准库自带的 argparse 就...

新手写 Python 小脚本时,经常会把要处理的文件名、要重复的次数直接写进代码里。比如统计一个文本文件有多少行,路径写成 notes.txt,下次想统计别的文件,就要打开代码改一行、再保存、再运行。改得多了,还容易顺手改错别的地方。

更省事的办法是把这些会变的东西变成“命令行参数”:运行脚本时在后面带上,脚本读到什么就处理什么,代码本身不用动。Python 标准库自带的 argparse 就是做这件事的工具,不需要额外安装,适合给手头的小脚本加一层“开关”。

先看一个写死的例子

假设我们有一个统计行数的小脚本 count_lines.py,一开始可能是这样写的:

with open("notes.txt", encoding="utf-8") as f:
    lines = f.readlines()
print("一共", len(lines), "行")

它只能统计 notes.txt。想统计 report.txt,就得改代码。把文件名变成参数,脚本立刻通用起来。

三步给脚本加上参数

argparse 的用法可以概括为三步:创建解析器、说明要哪些参数、解析后拿来用。

import argparse

parser = argparse.ArgumentParser(description="统计文本文件的行数")
parser.add_argument("--file", required=True, help="要统计的文本文件")
parser.add_argument("--encoding", default="utf-8", help="文件编码,默认 utf-8")
args = parser.parse_args()

with open(args.file, encoding=args.encoding) as f:
    lines = f.readlines()
print("一共", len(lines), "行")

运行方式也跟着变了:

python count_lines.py --file notes.txt
python count_lines.py --file report.txt --encoding utf-8

–file 是必选参数,没给就会报错并提示用法;–encoding 给了默认值,不写就按 utf-8 处理。参数名一旦定下来,运行命令就有了固定格式,别人拿到脚本也能照着用。

再加两个实用的参数

只加一个文件参数还不够直观,再补两个常见类型,就能覆盖新手小脚本的大多数场景。

parser.add_argument("--top", type=int, default=0, help="只统计前 N 行,0 表示全部")
parser.add_argument("--verbose", action="store_true", help="打印更多过程信息")

–top 用 type=int 告诉解析器要把输入转成整数,这样后面才能直接和数字比较;–verbose 是开关型参数,写上就表示开启,不写就关闭,不需要再传一个 true 或 false。

使用的时候可以组合起来:

python count_lines.py --file notes.txt --top 5 --verbose

一个小建议:参数多了之后,先运行一次 --help 看看。argparse 会自动生成帮助信息,把每个参数的含义和默认值列出来,相当于脚本自带一份简短说明书:

python count_lines.py --help

三个新手容易踩的坑

第一,忘记写 type=int。命令行传进来的东西默认都是字符串,不转类型就直接做数字比较,程序要么报错,要么算出奇怪的结果。需要数字的地方,定义参数时就写清楚类型。

第二,可选参数没有默认值。参数没给值时,程序拿到的就是 None,后面一旦直接使用就会出问题。能给默认值的地方就给一个,哪怕只是 0 或者空字符串,脚本的容错能力会好很多。

第三,参数名起得太随意。–f、–x 这种名字过两天自己也看不懂,尽量用 --file、–top 这样一看就明白的词。如果常用某个参数,还可以加一个短名字,比如 “-n” 和 “–top” 同时支持,写起来更顺手。

给自己留一个小练习

找一个你以前写过的小脚本,比如定时提醒、整理文件或者读配置的脚本,给它加一个命令行参数:可以是要处理的文件,也可以是重复次数或者开关。先只加一个,跑通 --help 和一次真实运行,再慢慢加第二个。

把“会变的东西”从代码里抽出来,是新手写脚本时很值得养成的一个小习惯。脚本还是那个脚本,但它开始能适应不同的输入了;以后换个文件、换个次数,不用再翻代码,改一行命令就够了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。