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

想法来历

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

Windows系统

命名为auto.bat

@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

20,5,80,fullbit
20,5,80,incremental
20,5,80,FedDQ

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

运行脚本

以下是上面提到的my_code.py

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环境版

#!/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:\你的路径 替换为你的实际路径。我的是:

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值