Python脚本中os模块的实用操作技巧

在日常服务器维护工作中,经常需要处理文件、目录或执行系统命令。Python 的 os 模块提供了与操作系统交互的接口,用起来简单直接,特别适合写一些自动化小脚本

获取当前工作目录和切换路径

有时候我们需要知道脚本运行时所处的目录,或者想切换到指定路径下进行操作。os.getcwd() 能拿到当前路径,os.chdir() 则用来切换。

import os

print(os.getcwd())  # 输出当前目录
os.chdir('/var/log')  # 切换到日志目录
print(os.getcwd())  # 再次打印确认

创建和删除目录

部署服务时常需新建日志或缓存目录。os.mkdir() 可以创建单个目录,os.makedirs() 支持递归创建多级目录。

os.mkdir('backup')  # 创建一级目录
os.makedirs('data/temp/files', exist_ok=True)  # 存在也不报错

清理临时文件夹时,os.rmdir() 删除空目录,而真正想删内容得配合其他方法,比如 shutil。但判断目录是否存在再动手是好习惯。

if os.path.exists('temp'):
    os.rmdir('temp')  # 只能删空目录

检查文件和路径状态

写监控脚本时,常要判断某个配置文件是否存在,或者是不是一个真正的文件。os.path.isfile() 和 os.path.isdir() 就派上用场了。

if os.path.isfile('/etc/nginx.conf'):
    print('Nginx 配置文件存在')
else:
    print('警告:配置文件丢失')

还可以用 os.path.getsize() 查看文件大小,单位是字节,适合做容量预警。

运行系统命令

有些任务 shell 命令更方便,比如重启服务。os.system() 能直接调用终端指令。

os.system('systemctl restart nginx')

虽然方便,但注意别拼接用户输入,容易有安全风险。更推荐用 subprocess 模块替代复杂场景。

遍历目录中的文件

清理过期日志时,往往需要列出某个目录下的所有文件。os.listdir() 返回文件名列表,结合循环就能逐个处理。

files = os.listdir('/var/log/app')
for f in files:
    filepath = os.path.join('/var/log/app', f)
    if f.endswith('.log') and os.path.getsize(filepath) == 0:
        os.remove(filepath)  # 删除空的日志文件

环境变量操作

很多服务依赖环境变量,比如数据库地址。os.environ 可以读取或设置它们。

db_host = os.environ.get('DB_HOST', 'localhost')
print(f'连接数据库: {db_host}')

调试时临时改个值也很方便,不用动配置文件。