BAT 文件在激活 kivy 脚本时自行终止

Posted

技术标签:

【中文标题】BAT 文件在激活 kivy 脚本时自行终止【英文标题】:BAT file terminates itself when activating a kivy script 【发布时间】:2021-12-15 20:16:40 【问题描述】:

我正在运行我自己的应用程序,它在 Windows 上的 Python 上使用 Kivy。每次使用该应用程序时,我都需要在运行该应用程序之前激活 kivy venv 脚本,我发现这很麻烦,所以我创建了一个批处理文件来配合它:

@echo off
python -m virtualenv kivy_venv 
kivy_venv\Scripts\activate
python myapp.py
pause

问题是,批处理文件在 kivy_venv\Scripts\activate 之后立即终止,我很确定这些是我在命令提示符中键入的行以使其正常工作,那么那里出了什么问题?

E:我看到 cmets 在激活行之前使用 call,但它似乎产生了同样的问题,所以我怀疑 Kivy 的 activate.bat 文件本身可能存在问题:

@echo off

set "VIRTUAL_ENV=C:\......\kivy_venv"

if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
) else (
    if not defined PROMPT (
        set "PROMPT=$P$G"
    )
    if not defined VIRTUAL_ENV_DISABLE_PROMPT (
        set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
    )
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
    set "ENV_PROMPT="
    if NOT DEFINED ENV_PROMPT (
        for %%d in ("%VIRTUAL_ENV%") do set "ENV_PROMPT=(%%~nxd) "
    )
    set "PROMPT=%ENV_PROMPT%%PROMPT%"
)

REM Don't use () to avoid problems with them in %PATH%
if defined _OLD_VIRTUAL_PYTHONHOME goto ENDIFVHOME
    set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%"
:ENDIFVHOME

set PYTHONHOME=

REM if defined _OLD_VIRTUAL_PATH (
if not defined _OLD_VIRTUAL_PATH goto ENDIFVPATH1
    set "PATH=%_OLD_VIRTUAL_PATH%"
:ENDIFVPATH1
REM ) else (
if defined _OLD_VIRTUAL_PATH goto ENDIFVPATH2
    set "_OLD_VIRTUAL_PATH=%PATH%"
:ENDIFVPATH2

set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%"

【问题讨论】:

这在本网站的 [python] [batch-file] 标记页面中已多次提及。使用call kivy_venv\Scripts\activate,而不是kivy_venv\Scripts\activate 我试过了,但还是出现了同样的问题。 【参考方案1】:

找出导致问题的原因:显然我一直在调用错误的kivy_venv

所以我的 app 文件夹中有一个 kivy_venv,但我还发现 C:\Users 中还有另一个 kivy_venv 文件夹,所以我转而调用它,瞧,它起作用了!原来这就是我的应用一直在使用的 venv!

改变了

kivy_venv\Scripts\activate

call C:\Users\<myusername>\kivy_venv\Scripts\activate

感谢所有提供帮助的人,但事后看来,我真的应该亲眼看到这个!

【讨论】:

以上是关于BAT 文件在激活 kivy 脚本时自行终止的主要内容,如果未能解决你的问题,请参考以下文章

使用bat脚本永久激活Windows系统

.bat 脚本在执行 AWS Auto Scaling 命令之前终止

有个EXE程序经常挂掉,想写个bat脚本扫描后台程序没运行后自行启动EXE程序。

从 Python 运行时获取 bat 文件的错误级别

bat脚本学习

windows没激活的状态写BAT脚本