这个 Python 内置库,能让你像写 shell 一样方便地管理系统文件和进程.
写 Python 的朋友应该都有这种经历。想在脚本里运行个系统命令,得写 subprocess.run() 再加一堆参数。想复制文件,得用 shutil.copy()。明明是很简单的事,代码却变得又臭又长。
要是能像写 shell 脚本那样直接操作文件和进程就好了。比如 ls、cp、mv、ps,一行命令就搞定。告诉你一个秘密,Python 自带一个库叫 os,大家经常用它拼路径。但有个更贴近 shell 的库,很多人不知道。它就是 pathlib。
pathlib 不是用来替代 os 的,它是让你用面向对象的方式处理路径。看起来像是在操作文件本身,而不是一堆字符串。像 touch 一个文件,用 pathlib 就是 Path('test.txt').touch()。一行代码,没了。跟 shell 里的 touch 命令一个意思。
想删除文件?Path('test.txt').unlink()。要不是 Python 的语法限制,这几乎就是 shell 命令本身。路径拼接更直接。Path('/home') / 'user' / 'data' 就能拼出 /home/user/data。不写 os.path.join,不担心斜杠方向。
查文件列表也简单。Path('.').iterdir() 返回当前目录下所有东西。想按后缀过滤?list(Path('.').glob('.py')) 直接拿回所有 Python 文件。写起来像 ls .py。
进程管理这块,虽然 pathlib 管不到,但有个更猛的库叫 sh。sh.ls('-l') 就能执行 ls -l。这不是 Python 标准库,得安装。但用起来是真的爽。像写 shell 一样调用任何系统命令。
比如想杀进程。平常你写 os.kill(pid, signal.SIGTERM)。现在写 sh.kill('-9', pid)。简单粗暴。想查网络连接,sh.netstat('-an') 一行搞定。
我自己的习惯是这样的。日常文件操作用 pathlib。要跑系统命令用 subprocess。一旦觉得 subprocess 麻烦,就换成 sh 库。它们俩一配合,代码量能少一半。
有人可能担心,用 sh 库会不会不安全。它只是一个封装,把系统命令包装成 Python 函数。你执行 sh.rm('-rf', '/') 跟你直接在终端敲 rm -rf / 效果一样。风险在于你自己操作了什么,而不是库本身。
最后说个实在的。写这种代码,同事看起来会觉得你像个老手。写 pathlib 的人,一般比写 os.path 的人更懂 Python 的现代写法。而且代码可读性高,自己以后回来看也省事。
去试试吧。把脚本里的 os.path 改成 Path,把 subprocess.run 换成 sh。你会喜欢上这种感觉。