如何在Python中按指定范围循环调用脚本?以Script2循环执行Script1共5次为例
脚本循环运行调整方案
原有Script2的代码存在三个核心问题,完全无法实现循环调用效果:
- 导入逻辑错位:Script2中
import YtTest的模块路径与实际Script1的文件名不匹配,属于无效导入 - 执行方式错误:
exec("Script1")传入的是纯字符串,既不是可执行代码块,也不是脚本文件路径,根本无法触发Script1的运行 - 模块缓存误区:直接导入带顶层执行逻辑的Script1时,Python会对导入的模块做全局缓存,第一次导入执行完代码后,后续循环里重复导入不会重新触发脚本运行,会出现循环只执行一次的问题
方案一:封装逻辑为函数(推荐,稳定性最高)
这种方式可以完全绕开Python模块导入的缓存机制,多次调用不会出现逻辑失效的问题,还能避免全局变量污染:
- 调整Script1的代码结构,把浏览器操作逻辑封装成可调用函数。建议将Script1的文件名改为符合Python导入规范的
script1.py(避免文件名以数字开头带来的导入兼容问题),同时将容易残留后台进程的driver.close()替换为可彻底释放资源的driver.quit(),调整后代码如下:
from selenium import webdriver import time def run_browser_task(): PATH = "C:\Program Files (x86)\chromedriver.exe" driver = webdriver.Chrome(PATH) driver.get("https://www.youtube.com/?hl=pl&gl=PL") time.sleep(1) driver.quit()
- 调整Script2的代码,直接导入封装好的函数进行循环调用,保证两个脚本放在同一工作目录下即可:
from script1 import run_browser_task # 按需求设置循环次数,此处为要求的5次 for loop_count in range(5): print(f"当前执行第 {loop_count + 1} 次任务") run_browser_task()
方案二:保留Script1原有结构,直接按路径调用
如果不想改动Script1的原有顶层执行逻辑,可以借助Python标准库runpy实现无缓存的脚本路径调用,完全不需要修改Script1代码:
- 保持Script1的原有代码不变,文件名保留为
Script1.py - 调整Script2代码如下:
import runpy # 按需求设置循环次数,此处为要求的5次 for loop_count in range(5): print(f"当前执行第 {loop_count + 1} 次任务") # 传入Script1的相对路径执行,每次执行都会重新加载脚本逻辑 runpy.run_path("Script1.py")
实操避坑提示
- 两个脚本必须存放在同一个运行工作目录下,否则会出现模块导入失败、文件路径找不到的报错
- 循环自动化场景下不建议使用
driver.close(),多次循环后容易残留后台Chrome进程占用内存,统一替换为driver.quit()可以彻底释放浏览器占用的系统资源 - 直接删除Script2中无效的
import YtTest代码,避免无意义的导入报错
内容的提问来源于stack exchange,提问作者don34664436
相关产品推荐
相关产品推荐

