首页 > 解决方案 > 从 1 个批处理文件启动 2 个 VENV 和 2 个 Python 程序

问题描述

我有 2 个充当“服务”的 python 程序,每个程序都从自己的 venv 运行。我正在寻找创建一个批处理文件来启动这两个服务,每个服务都在自己的专用终端上。

我能够创建 1 个批处理文件来启动 venv 和服务,但我无法将它们合并到一个批处理文件中。

CALL <PATH_TO_VENV_SCRIPTS>\activate
"<PATH_TO_PYTHON_FILE>main.py"
pause

当我运行上面的文件时,会打开一个终端,激活 venv,并使用 venv 运行 main.py。

现在我正在尝试使用 1 批来启动这两项服务。我有以下内容:

START <PATH_TO_VENV1_ACTIVATE.BAT>
"<PATH_TO_SERVICE1_PYTHON_FILE>main.py"

START <PATH_TO_VENV2_ACTIVATE.BAT>
"<PATH_TO_SERVICE2_PYTHON_FILE>main.py"

上面的文件确实打开了 2 个终端,并激活了两个 VENV,但不幸的是,python 文件是从在上述 2 之前打开的第三个终端启动的。

如何让 python 文件从他们自己的 VENV 终端启动?

任何帮助是极大的赞赏。

提前致谢!

标签: pythonbatch-fileservice

解决方案


您必须在新创建的 venv 终端中将 python 文件作为命令启动。如果您从父脚本启动 python 服务,它们将在此终端上下文中执行。

换句话说:您必须将脚本的执行包含在您的PATH_TO_VENV1_ACTIVATE.BAT中。但是,如果您的 python 脚本在执行后没有终止,您将永远无法到达那里,“父”终端将挂在第一个脚本上。因此,请确保脚本以不会阻塞父调用上下文的方式运行。

HTH

编辑:如果您的脚本无论如何都在启动服务,请考虑创建一个容器并从那里启动它们。因此,您拥有一个封装的上下文,并且易于执行。


推荐阅读