python - 从 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 文档中找不到这样做的方法。
解决方案
无需创建其他批处理文件:
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
推荐阅读
- ios - 如何在不同类型的segue的基础上执行不同的功能?
- configuration - 在ansible中拥有一组共同角色作为多个剧本的基础的明智方法?
- pyspark - 通过使用凭据直通的 Azure databricks 中的 python 脚本查找 Azure Datalake 中文件/文件夹的上次修改时间戳
- c++ - 结合函数参数包和默认参数
- html - 无法在 ASP.Net MVC 页面中的图像上显示文本
- typescript - Typescript - 为一个非常通用的函数定义接口
- java - 如何阅读 .logs 文档的最后一行?
- javascript - Firefox 开发者版获取注册在元素 getEventListeners 上的所有事件监听器
- hibernate - 具有相同标识符值的不同对象已与 GORM (Grails) 的会话相关联
- java - java中的日期时间格式,例如“2020年6月3日下午5:04:05”