用于尝试两个 python 版本的批处理

Batch for trying two python versions

系统可能只有 Python 版本 2.4.5 或 2.7.9。我正在尝试编写一个批处理错误处理,首先尝试使用 python 2.7.9,如果失败,请使用 python 2.4.5.

条件

系统有公司安装的软件,只有Python 2.4.5 或Python 2.7.9。而且我不知道是哪一个,所以我的脚本必须向后兼容。

这就是我的

rem
@echo off

echo Building
"%COMMONPROGRAMFILES%\CompanyName\python\python27\python.exe" build.py

IF ERRORLEVEL 1 GOTO TRY-PYTHON-24
IF ERRORLEVEL 0 GOTO FINISHED-BUILDING

:TRY-PYTHON-24
"%COMMONPROGRAMFILES%\CompanyName\python\python24\python.exe" build.py

IF ERRORLEVEL 0 GOTO FINISHED-BUILDING


:FINISHED-BUILDING:
echo Done
...more code...

预期结果

先尝试使用Python 2.7.9,如果有ERRORLEVEL 1,再尝试Python 2.4.5。那里不会有错误。这是编写批处理版本 try except 语句(如 Python 的正确方法吗?

比如..

try:
    ...Python 2.7.9...
except:
    ...Python 2.4.5...

来源

我是根据微软的指南 (https://support.microsoft.com/en-us/kb/39585) 写的。但我不确定这是否是在 Python.

的两个版本上 try except 的最佳方法

你可以使用 IF EXIST :

set "p279="%COMMONPROGRAMFILES%\WatchGuard\python\python27\python.exe""
set "p245="%COMMONPROGRAMFILES%\WatchGuard\python\python24\python.exe""

if exist %p279% (
   set "python=%p279%"
) else (
  set "python=%p245%"
)

call %python% build.py

我无法说明批处理文件中 try-except 构造的一般情况,但有一种更简单的方法可以解决此特定问题:使用 PATH 变量。显示的代码可以替换为

@echo off
set "PATH=%PATH%;%COMMONPROGRAMFILES%\WatchGuard\python\python27"
set "PATH=%PATH%;%COMMONPROGRAMFILES%\WatchGuard\python\python24"
python build.py || exit /b

rem ... more code ...

以这种方式设置 PATH 会使批处理文件解释器自动在它可能所在的两个目录中查找 python.exe。如果 两个 版本的 Python 都安装了,它将采用列表中较早的版本,即 ...\python27 中的版本。 (请注意,这意味着如果在调用脚本时已出现在 PATH 中的目录中安装了 其他 版本的 Python,则将使用该目录。这是可能以这种方式设置系统的人想要什么。)