【问题标题】:Checking if an exe is 32 bit or 64 bit检查exe是32位还是64位
【发布时间】:2012-06-19 16:58:02
【问题描述】:

我正在编写一个使用 scons 构建 .exe 的 python 程序,然后检查它是 64 位还是 32 位。我试过platform.architecture(test1.exe),但问题是当我给一个32位的exe时,它说它是64位的。

我尝试使用dumpbin,但输出很大,所以我使用了dumpin /HEADERS test.exe |find "machine"。问题是我不能使用 python 来执行这个命令。当我使用subprocess.call(['dumpbin /HEADERS test2.exe |find "machine"']) 时,出现以下错误

Traceback (most recent call last):
  File "test_scons.py", line 66, in <module>
    print "Architecture of the compiled program is ",subprocess.call(["dumpbin /HEADERS test2.exe |find ""machine" ])
  File "C:\Python27\lib\subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 679, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 896, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

【问题讨论】:

  • 错误是路径问题,找不到可执行文件/脚本。
  • 如果您要启动 SCons 来构建可执行文件,为什么需要知道它是否为 32/64 位?我认为您可以在 SCons 中通过构建您传递给它的选项来控制它。
  • @Brady:它找不到名为'dumpbin /HEADERS test2.exe |find "machine"' 的二进制文件,没有..
  • @MartijnPieters,好的,我明白了,谢谢。
  • 对于 Python3,请查看此帖子:stackoverflow.com/questions/61999530/… 并从@L3viathan 中寻找答案。它就像一个魅力!

标签: python scons


【解决方案1】:

您需要单独指定所有参数:

subprocess.call(['dumpbin', '/HEADERS', 'test2.exe', '|', 'find', '"machine"'])

你也可以在 python 中通过 grep 输出。

顺便说一句:platform.architecture() 告诉你当前运行 scons 的平台架构on,没有关于你正在生成的二进制文件,甚至没有关于 python 版本的编译方式。它可以为其他二进制文件提供此信息,但仅当可执行文件指向 Python 解释器时,并且可能不在 Windows 上,因为没有 file 命令的等效项在那里。

【讨论】:

  • 您确定子进程允许变量参数而不是列表吗? subprocess.call('ls, '-a') 对我来说失败了(Python 2.7.2),而 subprocess.call(['ls', '-a']) 按预期工作。
  • 对执行 dumpbin 的问题的很好回答,但我想知道 OP 是否需要这样做。似乎 32/64 位应该由构建过程控制,并且在启动构建后不需要查询。
  • @Brady:也许;我自己从不使用 scons,也从不构建 Windows 二进制文件。
  • 抱歉,打错了。我输入的是platform.architecture(test1.exe),我读了一些可以为您提供.exe 文件体系结构的地方。 @brady 这是一个诊断,我被告知要添加此功能。
  • @cyberbemon:该函数的文档声明仅适用于 python 可执行文件,并且仅适用于类 UNIX 平台。
猜你喜欢
  • 1970-01-01
  • 2014-08-04
  • 2010-11-03
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多