2

我正在编写一个使用 scons 构建的 python 程序,.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
4

1 回答 1

5

您需要分别指定所有参数:

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

您也可以很好地通过 python 中的输出进行 grep。

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

于 2012-06-19T08:51:54.833 回答