Tengo un archivo por lotes como este para crear y activar un entorno virtual de Python e instalar algunos paquetes.
crear.bat:
mkdir "%CD%\.venv"
python -m venv .venv
call .venv\Scripts\activate
python -m pip install --upgrade pip
La tercera línea es un archivo por lotes que se ejecuta utilizando el comando de llamada del lote. Lo que obtengo es esto:
E:\test>create.bat
E:\test>mkdir "E:\test\.venv"
E:\test>python -m venv .venv
E:\test>call .venv\Scripts\activate
Collecting pip
Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 19.0.3
Uninstalling pip-19.0.3:
Successfully uninstalled pip-19.0.3
Successfully installed pip-20.0.2
Sin embargo, como puede ver, cuando ejecuto la última línea no veo el texto típico que esperaba:
...
(.venv) E:\test\> python -m pip install --upgrade pip
Simplemente imprime el resultado del resto de las operaciones. Normalmente esto no sería un problema, pero una de las tareas posteriores es un script de Python que solicita información, pero todo se ignora y se ejecuta sin preguntar.
Como referencia, estoy agregando el resultado si escribo los comandos manualmente uno por uno:
E:\test>mkdir "%CD%\.venv"
E:\test>python -m venv .venv
E:\test>call .venv\Scripts\activate
(.venv) E:\test>python -m pip install --upgrade pip
Collecting pip
Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 19.0.3
Uninstalling pip-19.0.3:
Successfully uninstalled pip-19.0.3
Successfully installed pip-20.0.2
Respuesta1
Yo mismo encontré la respuesta. No pensé demasiado en ello ya que el script por lotes que llamé era un script generado automáticamente desde Python. Pero incluía la línea
@echo off
al principio. Por supuesto, este comando todavía estaba activo cuando volvió a mi secuencia de comandos. Resuelto reescribiendo el script para:
mkdir "%CD%\.venv"
python -m venv .venv
call .venv\Scripts\activate
@echo on
python -m pip install --upgrade pip