Python 检查exe是32位还是64位

Python 检查exe是32位还是64位,python,scons,Python,Scons,我正在编写一个python程序,它使用scons构建一个.exe,然后检查它是64位还是32位。我尝试了platform.architecture(test1.exe),但问题是当我给出一个32位的exe时,它说它是64位的 我尝试使用dumpbin,但是输出量很大,所以我使用了这个dumpin/HEADERS test.exe | find“machine”。问题是我不能使用python来执行这个命令。当我使用subprocess.call(['dumpbin/HEADERS test2.ex

我正在编写一个python程序,它使用scons构建一个
.exe
,然后检查它是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
回溯(最近一次呼叫最后一次):
文件“test_scons.py”,第66行,在
打印“编译程序的体系结构为”,子进程调用([“dumpbin/HEADERS test2.exe | find”“machine”])
调用中第493行的文件“C:\Python27\lib\subprocess.py”
返回Popen(*popenargs,**kwargs)。等待()
文件“C:\Python27\lib\subprocess.py”,第679行,在\uuu init中__
错误读取,错误写入)
文件“C:\Python27\lib\subprocess.py”,第896行,在执行子进程中
startupinfo)
WindowsError:[错误2]系统找不到指定的文件

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

subprocess.call(['dumpbin', '/HEADERS', 'test2.exe', '|', 'find', '"machine"'])
您也可以用python快速浏览输出


顺便说一句:告诉您当前运行scons的平台体系结构,没有关于您正在生成的二进制文件,甚至没有关于python版本是如何编译的。它可以为其他二进制文件提供此信息,但前提是可执行文件指向Python解释器,并且可能不在Windows上,因为那里没有与
文件
命令等效的命令。

错误是路径问题,它找不到可执行文件/脚本。如果您正在启动SCON以生成可执行文件,为什么您需要知道它是否为32/64位?我想你会用传递给它的构建选项在SCON中控制它。@Brady:它找不到名为
'dumpbin/HEADERS test2.exe的二进制文件| find“machine”
,不…@MartijnPieters,好的,我明白了,谢谢。对于Python3,请查看此帖子:并从@L3viathan中寻找答案。它就像一个符咒!您确定子流程允许变量参数而不是列表吗
subprocess.call('ls',-a')
对我来说失败(Python 2.7.2),而
subprocess.call(['ls','-a'])
工作正常。对于执行dumpbin的问题,回答得不错,但我想知道OP是否需要这样做。看起来32/64位应该由生成过程控制,启动生成后不需要查询。@Brady:也许;我自己从来不使用SCON,也不构建windows二进制文件。对不起,这是一个输入错误。我输入的是
platform.architecture(test1.exe)
,我在其中阅读了一些内容,这些内容将为您提供.exe文件的体系结构@brady这是一个诊断,我被告知在@cyberbemon中添加此功能:该函数的文档说明仅适用于python可执行文件,并且仅适用于类UNIX平台。