【问题标题】:Nothing returned when using 32 bit Python os.popen on a 64 Bit Windows 7 System在 64 位 Windows 7 系统上使用 32 位 Python os.popen 时没有返回任何内容
【发布时间】:2011-02-28 16:06:48
【问题描述】:

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

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

它返回''(什么都没有)。

我也尝试过使用 subprocess.Popen 获得相同的结果。

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

有谁知道我是否可以让 subprocess.Popen 或 os.popen 使用 32 位版本的 Python 在 64 位 Windows 系统上工作?我不确定我哪里出错了。

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

【问题讨论】:

  • 您是否尝试从命令行运行相同的命令?成功了吗?
  • 对不起。我应该指出这一点。我可以从命令行毫无问题地使用此命令。
  • "\" 是一个转义字符。改用正斜杠或双反斜杠
  • @Corey Goldberg:使用双反斜杠或单正斜杠也不会产生任何效果。

标签: python windows-7 popen


【解决方案1】:

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

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

【讨论】:

  • 是否必须包含完整路径?你能不能不让系统 PATH 为你做这项工作?
【解决方案2】:

解析manage-bde 的输出有点老套。输出格式在未来的 Windows 版本中很容易更改,您的脚本会中断。

更简洁、更易于维护的替代方法是使用 BitLocker WMI 提供程序 Win32_EncryptableVolume。具体来说,GetProtectionStatus 方法。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2011-09-02
      • 2019-03-08
      • 2021-12-22
      相关资源
      最近更新 更多