You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python脚本的for循环中重复执行另一个Python脚本的问题

解决Python循环中重复执行外部脚本的问题

Python里的import语句有个特性:模块一旦被导入,就会被缓存起来,后续再import只会直接读取缓存的模块对象,不会重复执行模块里的顶层代码,所以你原来的循环里用import只会在第一次迭代时跑脚本。

下面给你几种可行的解决办法:

方法1:用subprocess直接调用Python执行脚本

这是最稳妥的方式,相当于每次在命令行手动跑一遍run_this_script.py,完全独立于当前脚本的进程,不会受模块缓存影响。

代码示例:

import subprocess
import sys

for i in range(1, 10):
    # 用当前环境的Python解释器执行目标脚本
    subprocess.run([sys.executable, "run_this_script.py"], check=True)
  • sys.executable能自动获取当前Python环境的解释器路径,避免不同环境的版本冲突
  • 加check=True的话,要是脚本执行出错(比如返回非0状态码),会直接抛出异常,方便你排查问题

方法2:用importlib重新加载模块(不推荐,仅限特殊场景)

如果不想新开进程,可以用importlib.reload()强制重新加载模块,让它再次执行顶层代码,但有几个坑要注意:

  • 模块里的全局变量会被重置,可能导致逻辑异常
  • 脚本里的if __name__ == "__main__":代码块不会被执行,因为reload时模块名不是__main__

代码示例:

import importlib
# 先导入一次模块
import run_this_script

for i in range(1, 10):
    importlib.reload(run_this_script)

方法3:把脚本逻辑封装成函数调用(最规范)

如果能修改run_this_script.py,建议把里面的核心逻辑封装成函数,然后在主脚本里导入这个函数循环调用,这是Python项目里最推荐的写法。

先修改run_this_script.py:

def main():
    # 把原来脚本里的所有逻辑都放到这个函数里
    print("执行脚本逻辑")  # 示例逻辑

# 保留原来的执行入口,方便单独运行脚本
if __name__ == "__main__":
    main()

然后主脚本里这么写:

from run_this_script import main

for i in range(1, 10):
    main()

内容的提问来源于stack exchange,提问作者Retsied

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:48:24