Python脚本调用的几种实用方式

在日常开发中,经常需要把一个功能封装成独立的 Python 脚本,然后从另一个脚本里调用它。比如你写了个自动备份文件的脚本,想让主程序定时触发它,这时候就得用到“脚本调用”。

直接导入模块

最常见的方式是把脚本当作模块导入。假设你有个 backup.py,里面定义了一个函数:

def run_backup():
    print("正在备份文件...")

在另一个脚本里可以直接 import:

import backup

backup.run_backup()

这种方式适合功能复用,但要求被调用的脚本能被 Python 路径找到,也就是在同一个目录或已添加到 sys.path 中。

使用 subprocess 启动外部脚本

有时候你不想导入,而是想“运行”另一个脚本,就像在命令行敲一样。比如你有个独立的 notify.py,负责发桌面通知:

import subprocess

subprocess.call(["python", "notify.py", "备份完成!"])

这样会启动一个新的 Python 进程执行脚本,适合解耦场景。比如主程序继续运行,不等待结果,或者你想传命令行参数给被调脚本。

如果想获取输出内容,可以用 subprocess.check_output

output = subprocess.check_output(["python", "status.py"])
print(output.decode("utf-8"))

通过 os.system 简单调用

如果你只是想快速执行一个脚本,不在乎返回值,os.system 更轻量:

import os
os.system("python clean.py")

但它没法方便地捕获输出,也不推荐处理复杂交互,适合简单的任务触发。

带参数的脚本调用

很多脚本需要接收参数。比如你有个 resize.py 用来批量缩放图片:

import sys

if __name__ == "__main__":
    folder = sys.argv[1]
    size = int(sys.argv[2])
    print(f"正在处理 {folder},目标尺寸 {size}")

从主脚本调用时就可以传参:

subprocess.call(["python", "resize.py", "/photos", "800"])

使用 exec 执行脚本文件

如果脚本是本地文件,且你信任它的来源,可以用 exec 直接读取并执行:

with open("task.py", "r", encoding="utf-8") as f:
    exec(f.read())

这种方式会在当前环境中执行代码,变量和函数都会暴露出来,适合插件式加载,但要注意命名冲突和安全问题。

区分 __name__ 实现双用途

为了让脚本既能独立运行,又能被导入时不自动执行,记得加这句:

if __name__ == "__main__":
    run_backup()

这样当脚本被 import 时,不会立刻触发备份操作,只有直接运行时才执行。