利用shell脚本实现python代码自动化运行(windows、Linux)

想法来历

为什么想要利用脚本来进行代码的自动化运行?是因为在做机器学习仿真的时候,因为需要对不同的参数组合的情况进行多次仿真,而一次仿真时间又很长,3个小时起步,调参的效率就很低。因此想着如果能够实现自动化更换参数,就可以一晚上跑好几种情况的仿真了,这将很大程度加速我的进程。

Windows系统

命名为auto.bat

powershell 复制代码
@echo off
setlocal EnableDelayedExpansion

rem 激活虚拟环境
call D:\ProgramData\Anaconda3\condabin\conda.bat activate qz1

rem 设置Python解释器路径
set PYTHON_EXEC=python

rem 设置脚本路径
set SCRIPT_PATH=E:\你的路径\my_code.py

rem 从文件读取参数
set PARAM_FILE=E:\你的路径\params.txt

rem 清空控制台
cls

rem 遍历参数文件中的每一行
for /f "tokens=1,2,3,4 delims=," %%a in (%PARAM_FILE%) do (
    echo Running: %PYTHON_EXEC% %SCRIPT_PATH% %%a %%b %%c %%d
    %PYTHON_EXEC% %SCRIPT_PATH% %%a %%b %%c %%d
    if !errorlevel! neq 0 (
        echo Error occurred with parameters %%a %%b %%c %%d
    )
)

rem 退出虚拟环境
call conda deactivate

endlocal
pause

代码解释

  1. 激活虚拟环境:
  • call %VENV_PATH%\Scripts\activate 激活指定路径的虚拟环境。
  1. 设置脚本路径:
  • set SCRIPT_PATH=E:\你的路径\my_code.py 设置要运行的Python脚本路径。
  1. 嵌套循环:
  • 使用嵌套 for 循环遍历所有参数组合,并运行Python脚本。
  • echo Running: %PYTHON_EXEC% %SCRIPT_PATH% %%a %%b %%c %%d 输出当前运行的命令,便于调试。
    %PYTHON_EXEC% %SCRIPT_PATH% %%a %%b %%c %%d 运行Python脚本,并传递当前组合的参数。
  1. deactivate 用于退出虚拟环境。和 pause 在批处理脚本结束时查看输出。

参数文件params.txt

powershell 复制代码
20,5,80,fullbit
20,5,80,incremental
20,5,80,FedDQ

每一行四个参数,对应了上面读取的四个参数%%a %%b %%c %%d,如果想自己修改参数的熟练,可以增加更多的%%e %%f表示更多的参数。

运行脚本

以下是上面提到的my_code.py

python 复制代码
def my_fun(param_1, param_2, param_3, param_4):
    print(f"params is {param_1} {param_2} {param_3} {param_4}")
if __name__ == "__main__":
	my_fun()

最后,在文件系统中双击auto.bat,即可运行:

Linux Shell

以下是上面脚本的等效Linux环境版

bash 复制代码
#!/bin/bash
set -e  # 确保发生错误时退出

# 激活虚拟环境
source /path/to/anaconda3/bin/activate qz1  # 修改为你的 Anaconda 安装路径和虚拟环境名

# 设置Python解释器路径
PYTHON_EXEC=python

# 设置脚本路径
SCRIPT_PATH=E:\你的路径\my_code.py  # 修改为你的 Python 脚本路径

# 从文件读取参数
PARAM_FILE=E:\你的路径\params.txt  # 修改为你的参数文件路径

# 清空控制台
clear

# 遍历参数文件中的每一行
while IFS=, read -r param1 param2 param3 param4; do
    echo "Running: $PYTHON_EXEC $SCRIPT_PATH $param1 $param2 $param3 $param4"
    $PYTHON_EXEC "$SCRIPT_PATH" "$param1" "$param2" "$param3" "$param4" || {
        echo "Error occurred with parameters $param1 $param2 $param3 $param4"
    }
done < "$PARAM_FILE"

# 退出虚拟环境
conda deactivate

遍历参数文件:

  • while IFS=, read -r param1 param2 param3 param4; do:使用 while 循环读取文件中的每一行参数。
  • IFS=, 设置内部字段分隔符为逗号。
  • read -r param1 param2 param3 param4 读取每行中的四个参数。
  • 使用 "$param1"$param2"$param3"$param4 来安全地处理带空格的参数。

修改脚本路径和参数文件路径

确保将 /path/to/anaconda3/bin/activateE:\你的路径 替换为你的实际路径。我的是:

bash 复制代码
source /home/user/anaconda3/bin/activate qz1
SCRIPT_PATH=/home/user/projects/my_code.py
PARAM_FILE=/home/user/projects/params.txt

使用方法

  1. 将脚本保存为 run_simulations.sh
  2. 使用命令添加脚本权限chmod +x run_simulations.sh
  3. 运行 ./run_simulations.sh
相关推荐
Georgeviewer4 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue4 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006345 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
迅易科技5 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics6 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1236 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术6 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
Litluecat6 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC6 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow