利用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
相关推荐
AngelPP2 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年2 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
AI探索者2 小时前
LangGraph StateGraph 实战:状态机聊天机器人构建指南
python
AI探索者2 小时前
LangGraph 入门:构建带记忆功能的天气查询 Agent
python
九狼3 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS3 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区4 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈4 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
FishCoderh4 小时前
Python自动化办公实战:批量重命名文件,告别手动操作
python
躺平大鹅4 小时前
Python函数入门详解(定义+调用+参数)
python