如何依次在多独立数据集上运行Python脚本?当前仅首个脚本执行成功
解决Python脚本顺序执行问题
你之前的代码错误在于把两个脚本路径放在同一个system命令里,这会被当成第一个脚本的命令行参数,所以只有第一个脚本会被执行,第二个路径只是作为参数传递给它,根本没启动第二个任务。要实现顺序执行,需要分别调用每个任务,前一个执行完成后再启动下一个。
方案1:用循环逐个调用os.system
把所有要执行的任务整理成列表,循环调用system,每个任务单独执行:
from os import system # 整理所有要执行的命令,每个命令对应一个数据集的运行任务 tasks = [ 'python "E:\\Test and delete\\2\\MainPythonFile.py" "数据集路径1"', 'python "E:\\Test and delete\\2\\MainPythonFile.py" "数据集路径2"', # 继续添加更多数据集对应的任务 ] # 依次执行每个任务,前一个完成后才会启动下一个 for task in tasks: system(task)
注意:路径中的反斜杠要写成\\(转义),或者直接用正斜杠/,避免路径解析错误。
方案2:用subprocess.run(更推荐)
os.system是较老的方法,subprocess模块功能更强大,能更安全地处理命令参数,还能获取执行状态:
import subprocess # 把每个任务拆分成列表形式,无需处理引号转义 tasks = [ ['python', 'E:/Test and delete/2/MainPythonFile.py', '数据集路径1'], ['python', 'E:/Test and delete/2/MainPythonFile.py', '数据集路径2'], # 添加更多任务 ] for task in tasks: # check=True会在脚本执行出错时抛出异常,方便排查问题 subprocess.run(task, check=True)
额外优化:确保运行时资源充足
如果要避免在系统资源紧张时启动新任务,可以添加资源检查逻辑,比如用psutil库监控CPU和内存使用率:
- 先安装依赖:
pip install psutil
- 添加检查逻辑的代码:
import subprocess import psutil import time def check_resource(cpu_limit=70, mem_limit=80): # 获取当前CPU使用率(百分比) cpu_usage = psutil.cpu_percent(interval=1) # 获取当前内存使用率(百分比) mem_usage = psutil.virtual_memory().percent return cpu_usage < cpu_limit and mem_usage < mem_limit tasks = [ ['python', 'E:/Test and delete/2/MainPythonFile.py', '数据集路径1'], ['python', 'E:/Test and delete/2/MainPythonFile.py', '数据集路径2'], ] for task in tasks: # 等待资源充足后再启动任务 while not check_resource(): print("系统资源占用过高,等待1分钟后重试...") time.sleep(60) print(f"启动任务: {' '.join(task)}") subprocess.run(task, check=True)
内容的提问来源于stack exchange,提问作者user19612204
相关产品推荐
相关产品推荐

