【发布时间】:2012-05-03 02:12:38
【问题描述】:
我必须在 Ubuntu 中调用一个可执行文件...刚刚学会了如何在 Windows 中使用 subprocess.Popen 来完成这项工作。现在,我需要在 Ubuntu 中重复这一步。
我使用了以下 Python 命令:
a=subprocess.Popen("filename.exe",shell=0)
回报是
Traceback (most recent call last):
File "/untitled0.py", line 29, in <module>
a=subprocess.Popen("filename.exe",shell=0)
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 8] Exec format error
如果我更改shell=1,不会有任何投诉,但也不会生成任何输出文件。
我已经使用file filename.exe检查了这个文件的类型
它返回:
filename.exe:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV), 动态链接(使用共享库),对于 GNU/Linux 2.6.9,不是 剥离
那么是否可以在 Ubuntu 中使用 subprocess.Popen 调用它?
【问题讨论】:
-
您是否尝试在 32 位主机上运行 64 位二进制文件?你能显示
uname -a的输出吗? -
我的 Ubuntu 好像是 32 位的,这可能会给我带来问题。我可以知道 uname -a 是什么吗?
-
这是一个打印主机信息的命令,包括操作系统、主机名、内核版本、内核的编译时间和架构(从中可以判断它是否是a)。在我的 32 位笔记本电脑上它打印
Linux radiance 2.6.26-2-686 #1 SMP Thu Jan 27 00:28:05 UTC 2011 i686 GNU/Linux而在我的 64 位服务器上它打印Linux red 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux。 -
感谢您的解释。我说的 Linux th-VirtualBox 3.2.0-24-generic-pae #37-Ubuntu SMP Wed Apr 25 10:47:59 UTC 2012 i686 i686 i386 GNU/Linux 所以我应该尝试一个 32 位 exe 文件。
-
是的,那是一个 32 位系统。