page contents

9 个神仙 Python 库,自动化直接开挂

如果一个任务会重复,它就要被自动化。如果它可能会重复,它也要被自动化。介绍 9 个鲜为人知的 Python 库。

attachments-2026-06-zI61G9bJ6a1e39ee569e6.png

如果一个任务会重复,它就要被自动化。如果它可能会重复,它也要被自动化。介绍 9 个鲜为人知的 Python 库。

1. pexpect — 像巫师一样自动化交互式程序

有没有试过自动化那些在终端里不停问你问题的程序?SSH、FTP、安装向导、那些死活不肯配合脚本化的奇葩遗留 CLI?

这正是 pexpect 的拿手好戏。

import pexpect

child = pexpect.spawn('ssh user@server.com')
child.expect('password:')
child.sendline('my_secret_password')
child.expect('$')
child.sendline('uptime')
child.interact()

为什么它堪称利器: 你可以脚本化程序的对话过程,而不仅仅是单条命令。我曾经用它自动化了一个部署流程——三个交互式提示,零文档。感觉就像在作弊。

进阶技巧: 把它和 Cron 结合起来,曾经的「手动服务器仪式 ( 一系列必须手动执行的固定运维步骤 )」瞬间变成了「无聊的定时任务」。

2. watchfiles — 实时响应文件变化(快的那一种)

大多数人会去用 watchdog。它管用。但 watchfiles 更快、更简单,底层用 Rust 构建。

from watchfiles import watch

for changes in watch('./incoming'):
    print("Something changed:", changes)
    # 在这里触发你的自动化

典型用例:

自动处理放入文件夹的文件

文件变化时自动重新构建资源

报告一出现就启动脚本

我用这个来自动验证数据转储——数据一落地就校验,没有轮询,没有等待,只有即时响应。

3. plumbum — Shell 脚本,但写起来真的很爽

如果你写过主要在调 shell 命令的 Python 代码……你受的苦够多了。

plumbum 让 shell 命令用起来就像 Python 对象一样。

from plumbum import local

ls = local["ls"]
grep = local["grep"]

print((ls["-a"] | grep[".py"])())

为什么它不一样: 你可以照样用管道、重定向和组合——而不用把代码写成字符串拼接恐怖片 ( 指 Bash 脚本中常见的 cmd1 + " | " + cmd2 式反模式 )。

我用这个把一个 200 行的 bash 脚本替换成了大约 40 行可读的 Python。未来的自己一定会感谢现在的你。

4. python-fire — 10 秒把任意脚本变成 CLI

你肯定有那种一直在改的脚本,因为「只需要再加一个标志 (Flag)」。停,用 fire。

import fire

def resize(path, width=800, height=600):
    print(f"Resizing {path} to {width}x{height}")

if __name__ == "__main__":
    fire.Fire(resize)

现在你就可以这样调用了:

python script.py ./images --width=1024 --height=768

为什么说它「危险」: 你会开始把所有东西都变成 CLI。说实话?这是一个好问题。

5. tenacity — 让你保持理智的重试逻辑

网络调用会失败。API 会超时。数据库会短暂掉线。脆弱脚本和生产级脚本之间的分水岭,就在于重试。

from tenacity import retry, stop_after_attempt, wait_fixed

@retry(stop=stop_after_attempt(5), wait=wait_fixed(2))
def fetch_data():
    print("Trying...")
    raise Exception("Temporary failure")

为什么它重要: 真正的自动化活在真实世界里,而真实世界是不稳定的。

我亲眼见过单单这一个库,就消除了整类「失败一次就再也没恢复」的 Bug。

6. streamz — 构建响应事件的数据管道

把 streamz 想象成「为数据流而非脚本打造的自动化」。

from streamz import Stream

source = Stream()

source.map(lambda x: x * 2).sink(print)

source.emit(10)
source.emit(20)

现在想象这些场景:

文件陆续到达

消息不断涌入

传感器持续更新

日志流式传入

你不用主动驱动管道,只需往里输入数据,它就会自动响应。

它最擅长的领域: 实时自动化、监控、事件驱动系统——那些通常最终变成一坨乱糟糟 while True 循环的东西。

7. diskcache — 让你的脚本记住东西(正确地做)

什么都记不住的自动化,注定跑不快。

diskcache 几乎零成本地给你一个快速的持久化缓存。

from diskcache import Cache

cache = Cache('./mycache')

@cache.memoize()
def expensive_call(x):
    print("Computing...")
    return x * x

print(expensive_call(10))
print(expensive_call(10))  # 这次瞬间返回

为什么它被严重低估: 缓存能把「10 分钟才能跑完」变成「10 秒搞定」。到了规模化阶段,这就是「不错的脚本」和「核心基础设施」的区别。

8. pywinauto — 自动化真正的 Windows 应用

不是所有东西都有 API。有些东西只有……按钮。

pywinauto 让你像耐心的机器人一样脚本化 Windows GUI。

from pywinauto import Application

app = Application().start("notepad.exe")
app.Notepad.menu_select("Help->About Notepad")
app.Notepad.AboutNotepad.OK.click()

没错,真的可以。 我用这个自动化过一个比 REST、JSON、甚至可能比电还古老的遗留会计工具。

如果它有窗口,你就能自动化它。

9. boltons — 严肃脚本缺失的工具箱

boltons 是一个实用到离谱的工具集合:缓存、迭代工具、字典工具、时间工具等等。

from boltons.iterutils import chunked

data = list(range(10))
print(list(chunked(data, 3)))

为什么它悄悄渗透进了我写的所有代码: 它消除了那些一年下来不知不觉浪费你好几个小时的小而无聊的问题。自动化不仅仅是那些大的效率飞跃——更是避免千刀万剐式的时间消耗 (Death by a Thousand Paper Cuts,英语习语,指大量微不足道的小问题累积成致命伤害 )。

 更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2026-06-02 10:03
  • 阅读 ( 25 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2115 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 2115 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章