从1个批处理文件启动2个VENVs和2个Python程序

从1个批处理文件启动2个VENVs和2个Python程序,python,batch-file,service,Python,Batch File,Service,我有两个python程序充当“服务”,每个程序都从自己的venv运行。我希望创建一个批处理文件来启动这两个服务,每个服务都在各自的专用终端上 我能够创建一个批处理文件来启动venv和服务,但我无法将它们合并到一个批处理文件中 CALL <PATH_TO_VENV_SCRIPTS>\activate "<PATH_TO_PYTHON_FILE>main.py" pause CALL\activate “main.py” 暂停 当我运行上面的文件时,会

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

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

CALL <PATH_TO_VENV_SCRIPTS>\activate
"<PATH_TO_PYTHON_FILE>main.py"
pause
CALL\activate
“main.py”
暂停
当我运行上面的文件时,会打开一个终端,激活venv,并使用venv运行main.py

现在,我尝试使用一个批来启动这两个服务。我有以下资料:

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"
开始
“main.py”
开始
“main.py”
上面的文件确实打开了两个终端,并激活了两个VENV,但不幸的是python文件是从前面提到的2个终端之前打开的第三个终端启动的

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

非常感谢您的帮助


提前谢谢

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

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


<>编辑:如果脚本正在启动服务,请考虑创建容器并从中启动这些容器。因此,您有一个封装的上下文,可以轻松执行。

在您的问题“如何生成路径文件…”中,这是一个拼写错误,您实际上是指“批处理文件”?拼写错误,对不起。我的意思是:如何让python文件从它们自己的VENV终端启动?您是否尝试过,
Start“VEnv1”%SystemRoot%\System32\cmd.exe/D/C“Call”\activate.bat“&“\python.exe”“\main.py”“
然后,
Start“VEnv2”%SystemRoot%\System32\cmd.exe/D/C“Call”\activate.bat“&\python.exe”“\main.py”
。根据您的要求,您可能希望将
/C
更改为
/K
.Compo,这非常有效。我稍微修改了一下:
Start“Service1”cmd.exe/d/c“CALL”“&”“”
Rinse and repeart for service2。工作起来很有魅力。谢谢我想,@RodrigoBastos也没问题,只是我的偏好是特别要求python.exe运行一个.py文件,而不是依赖于系统及其任何可配置或容易破坏的设置来花时间尝试解决它。容器是docker之类的吗?不幸的是,在目前的环境中,这是不可用的,但会为将来的项目考虑。