在64位Windows 7系统上使用32位Python os.popen时没有返回任何内容

时间:2011-02-28 16:06:49

标签: python windows-7 popen

我正在尝试使用以下命令在64位Windows 7系统上运行bitlocker加密检查:

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

然后返回''(没有)。

我也试过使用subprocess.Popen,结果相同。

这是在64位Windows 7计算机上运行的32位版本的Python 2.6.6。当我使用64位版本的Python时,os.popen和subprocess.Popen都可以工作,但我无法使用64位Python,因为我有许多32位系统需要支持,py2exe不支持在64位平台上捆绑。

有没有人知道我是否可以使用32位版本的Python来使用subprocess.Popen或os.popen来处理64位Windows系统?我不知道我哪里出错了。

或者,如果有人知道如何在没有使用manage-bde.exe的情况下检查Windows 7系统上的完全bitlocker加密,我将不胜感激。

3 个答案:

答案 0 :(得分:2)

manage-bde.exe位于“真正的”System32目录中。 32位应用程序在尝试访问时会自动重定向到%windir%\ SysWOW64。您可以通过 SysNative 别名访问它:

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

答案 1 :(得分:0)

解析manage-bde的输出是一种hacky。在将来的Windows版本中,输出格式很容易改变,并且您的脚本会中断。

更清晰,更易于维护的替代方法是使用BitLocker WMI Provider,Win32_EncryptableVolume。具体来说,是GetProtectionStatus方法。

答案 2 :(得分:0)

正如已经指出的那样,您可以从" real"访问64位应用程序。 System32目录通过 Sysnative 别名(即%windir%\ Sysnative)。但请注意,%windir%\ Sysnative仅针对32位应用程序定义,并且对64位应用程序无效:" 64位应用程序无法使用 Sysnative 别名,因为它是虚拟的目录不是真正的目录" (link)。