利用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
相关推荐
淬炼之火2 分钟前
笔记:对MoE混合专家模型的学习和思考
人工智能·笔记·学习·语言模型·自然语言处理
憨波个4 分钟前
【说话人日志】从固定输出到可变说话人数:EEND-EDA
人工智能·深度学习·音频·语音识别
sali-tec5 分钟前
C# 基于OpenCv的视觉工作流-章49-人脸检测
图像处理·人工智能·opencv·算法·计算机视觉
人工智能AI技术7 分钟前
“小飞贼”Little Snitch杀入Linux,内核级流量拦截
人工智能
永霖光电_UVLED9 分钟前
CEA-Leti 和 CEA-List 已宣布与 Powerchip 半导体制造公司 (PSMC) 合作
人工智能·生成对抗网络·汽车·制造·激光
斯班奇的好朋友阿法法9 分钟前
Django 项目打包部署完整指南(适配你的项目,零报错)
python·django·sqlite
林开落L9 分钟前
【项目实战】博客系统完整测试报告(含自动化+性能测试)
python·功能测试·jmeter·自动化·postman·性能测试·xmind
taxunjishu9 分钟前
速冻食品物联网网关应用 DeviceNet转Profinet提升产线协同效率
物联网·网络协议·自动化
ai产品老杨9 分钟前
异构计算时代的安防底座:基于 x86/ARM 双架构与多芯片适配的 AI 视频云平台架构解析
arm开发·人工智能·架构
JustNow_Man10 分钟前
【opencode】使用方法
linux·服务器·网络·人工智能·python