返回专题首页

Python 专题

自动化脚本实战:CLI 工具、批处理与任务自动化

除了 Web 后端,Python 在自动化领域的优势同样非常明显。很多时候,我们并不需要一个完整应用,只需要一个能快速解决问题的脚本、一个命令行工具,或者一套可以定时执行的批处理流程。

Python 专题第 36 篇 / 39 篇4 分钟

除了 Web 后端,Python 在自动化领域的优势同样非常明显。很多时候,我们并不需要一个完整应用,只需要一个能快速解决问题的脚本、一个命令行工具,或者一套可以定时执行的批处理流程。

这一节我们会回到 Python 最擅长的场景里,看看怎样把脚本写得不只是“能跑”,而是具备参数、日志、错误处理和基本可维护性的真正工具。

为什么 Python 特别适合写自动化?

Python 适合自动化,不只是因为语法简洁,而是因为它把这几件事放在了一起:

  • 写脚本成本低;
  • 标准库足够丰富;
  • 第三方生态成熟;
  • 和文件、网络、命令行、数据处理打交道都很顺。

所以自动化不是 Python 的“副业”,而是它最核心的强项之一。

命令行参数解析基础

一个真正能长期使用的脚本,通常不应该把参数写死在代码里。

它至少要能处理:

  • 输入路径;
  • 输出路径;
  • 模式开关;
  • 是否覆盖、是否预览;
  • 日志级别等控制项。

命令行参数解析的价值,不只是方便调用,而是让脚本从“一次性代码”变成“可重复执行的工具入口”。

一个最小可维护的 CLI 示例可以先写成这样:

import argparse
from pathlib import Path


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--input", required=True)
    parser.add_argument("--output", required=True)
    parser.add_argument("--dry-run", action="store_true")
    args = parser.parse_args()

    input_path = Path(args.input)
    output_path = Path(args.output)

    if args.dry_run:
        print(f"[dry-run] would process {input_path} -> {output_path}")
        return

    output_path.write_text(input_path.read_text(encoding="utf-8"), encoding="utf-8")


if __name__ == "__main__":
    main()

这段代码虽然不长,但已经具备了真实工具非常重要的几个特征:参数外置、路径明确、支持预演、入口清晰。

文件批处理与目录遍历

自动化脚本最常见的场景之一,就是对一批文件做相同操作。

比如:

  • 批量重命名;
  • 批量转换格式;
  • 批量提取内容;
  • 批量生成索引。

这里真正重要的,不是循环本身,而是你是否把输入范围、过滤规则、异常文件处理和输出策略想清楚。

因为批处理一旦失控,错误往往不是一个,而是一整批。

所以批处理脚本里一个非常值得坚持的习惯,就是优先支持 --dry-run。先看“将要处理什么”,再真正落盘或覆盖,这个成本很低,但能显著降低误操作风险。

定时任务与任务编排思路

自动化很多时候并不是“手动执行一次”,而是要稳定重复地运行。

这时就会涉及:

  • 定时执行;
  • 多步骤串联;
  • 失败重试;
  • 执行日志记录;
  • 幂等性控制。

也就是说,脚本走向任务化之后,思路就不再只是“把代码写通”,而是要开始考虑流程稳定性。

自动化脚本的日志、错误处理与重试

自动化越重要,越不能靠“出错了看终端”来维持。

一个值得长期使用的脚本,通常至少应该有:

  • 关键步骤日志;
  • 明确错误提示;
  • 对可恢复失败的重试策略;
  • 对不可恢复错误的快速停止机制。

这样当任务跑在定时环境或批量场景里时,你才能知道它到底做了什么、卡在什么地方、哪些内容成功、哪些失败。

如何让脚本从“能跑”走向“可维护”?

真正让脚本变得可维护的,通常不是更复杂的框架,而是几个非常朴素的原则:

  • 参数外置;
  • 日志清楚;
  • 错误可追踪;
  • 输入输出边界明确;
  • 核心逻辑尽量函数化、可测试。

这些原则一旦做到位,一个脚本就会从“临时工具”慢慢变成“可靠资产”。

如果你还想再往前走一步,可以继续补:

  • 返回码规范;
  • 失败报告输出;
  • 简单配置文件支持;
  • 单元测试和样例输入目录。

总结与预告

这一节我们重新回到了 Python 最有“效率感”的一面,理解了脚本、命令行工具和批处理任务该如何写得既快速又不至于失控。自动化真正的价值,不只在省时间,更在于把重复动作沉淀成可靠流程。

下一节我们会继续进入更偏工具链与元编程的方向,看看 Python AST 如何支持静态分析、代码生成和批量改造。