首页 > 解决方案 > 从 Python 调用后,从 Batch 中获取 ERRORLEVEL 的值(或返回码)

问题描述

我制作了一个脚本(称为 isPA64.bat)来确定执行系统是否为 64 位(基于此Bear's Log提示):

@echo off
setlocal
set str1=%PROCESSOR_ARCHITECTURE%
set/A sixty4=0
if not x%str1:64=%==x%str1% set/A sixty4=1
endlocal & exit/B %sixty4%

它从另一个名为 callpa.bat 的简单批处理中调用(也可以直接调用,但这证明 ERRORLEVEL 确实正确设置了):

@echo off
ver>nul & (call isPA64.bat & if ERRORLEVEL 1 (echo 64-bit & exit/B 1) else (echo not 64-bit & exit/B 0))

到目前为止,这一切都很好;但是,我必须从 Python 3.7.2 程序中调用这两者之一。我这样做:

import subprocess
print(subprocess.run(["callpa.bat"]))

很简单,对吧?但是我无法弄清楚如何在python代码中获取有效的返回代码......有没有办法将python代码中的变量分配给“退出”/返回代码或ERRORLEVEL 的值,来自执行外层脚本的 cmd.exe shell?...我在 python 文档中找不到这样做的方法。

标签: pythonbatch-filesubprocesserrorlevelreturn-code

解决方案


无需创建其他批处理文件:

import os
arch = os.environ['PROCESSOR_ARCHITECTURE']
if arch == 'x86':
    print("x86")
    exit(0)
else:
    print("x64")
    exit(1)

然后将其导入为错误级别变量。

也可以使用 WMI:

import sys
import win32com.client
wmiservice = win32com.client.dispatch("WbemScripting.SWbemLocator")
swbemservice = wmiservice.ConnectServer(., "root/cimv2")
items = swbemservice.ExecQuery("Select * From Win32_OperatingSystem")
for item in items:
    if item.OSArchitecture == 'x86':
        print("x86")
        exit(0)
    else:
        print("x64")
        exit(1)

您需要从http://sourceforge.net/projects/pywin32/files/下载适用于 windows 扩展的 python


推荐阅读