python - 从 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 终端启动?
任何帮助是极大的赞赏。
提前致谢!
解决方案
您必须在新创建的 venv 终端中将 python 文件作为命令启动。如果您从父脚本启动 python 服务,它们将在此终端上下文中执行。
换句话说:您必须将脚本的执行包含在您的PATH_TO_VENV1_ACTIVATE.BAT中。但是,如果您的 python 脚本在执行后没有终止,您将永远无法到达那里,“父”终端将挂在第一个脚本上。因此,请确保脚本以不会阻塞父调用上下文的方式运行。
HTH
编辑:如果您的脚本无论如何都在启动服务,请考虑创建一个容器并从那里启动它们。因此,您拥有一个封装的上下文,并且易于执行。
推荐阅读
- javascript - 嵌套页面/猫鼬模式如何工作?得到错误
- vuetify.js - Vuetify 输入颜色属性仅在聚焦时有效
- azure-api-management - Azure API 管理角色“服务编辑器”
- javascript - 将 JS 代码从 NodeJS HTML 文件导出到 JS 文件
- dataframe - Spark:如何根据子集条件过滤掉数据
- javascript - 是否有 Firefox 替代 Google Chrome 中可用的 debug() 函数?
- android - 如何在更新时将 React Native Android APK 替换为 Native Android APK?
- ios - 无法在 iOS 13 中转换为 mp4
- javascript - 如何使用级别嵌套的 JSON 对象在 HTML 中创建树结构
- grafana - 导入后 Grafana 仪表板空白