在64位Windows 7系统上使用32位Python的os.popen没有返回任何结果

1 投票
3 回答
1727 浏览
提问于 2025-04-16 12:41

我正在尝试在一台64位的Windows 7系统上使用以下命令来检查BitLocker加密:

import os
os.popen('C:\Windows\System32\manage-bde.exe -status c:').read()

但是它返回了空值(什么都没有)。

我也试过用subprocess.Popen,结果也是一样。

我现在使用的是32位的Python 2.6.6,在这台64位的Windows 7机器上运行。当我使用64位的Python时,os.popen和subprocess.Popen都能正常工作,但我不能使用64位的Python,因为我需要支持很多32位的系统,而且py2exe不支持在64位平台上打包。

有没有人知道我能否在64位的Windows系统上,用32位的Python让subprocess.Popen或os.popen工作?我不太确定哪里出了问题。

另外,如果有人知道如何在没有manage-bde.exe的情况下检查Windows 7系统是否完全启用了BitLocker加密,我将非常感激。

3 个回答

0

正如之前提到的,你可以通过Sysnative这个别名来访问“真实”的System32目录,路径是%windir%\Sysnative。不过要注意的是,%windir%\Sysnative这个路径只对32位应用程序有效,64位应用程序是不能使用这个别名的,因为Sysnative其实是一个虚拟目录,并不是真实存在的目录(链接)。

0

解析manage-bde的输出结果有点像是走捷径。因为它的输出格式在未来的Windows版本中可能会改变,这样你的脚本就会出问题。

一个更干净、更容易维护的选择是使用BitLocker的WMI提供程序,叫做Win32_EncryptableVolume。具体来说,可以使用GetProtectionStatus这个方法。

3

manage-bde.exe这个程序在真正的System32文件夹里。32位的应用程序在尝试访问这个文件夹时,会自动被重定向到%windir%\SysWOW64这个地方。你可以通过SysNative这个别名来访问它:

import os
os.popen(r'C:\Windows\SysNative\manage-bde.exe -status c:').read()

撰写回答