【问题标题】:Call a subprocess调用子进程
【发布时间】: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 位系统。

标签: python ubuntu


【解决方案1】:

快速阅读 python 文档,看起来你在做正确的事情,所以 .如何尝试执行说 /bin/false 这应该是您系统上已知的工作 exe。如果可行,那么您的 exe 可能是错误的(在 32 位系统上可能是 64 位)

【讨论】:

  • 它并没有通过输入/bin/false来抱怨,所以看起来我的exe是错误的。另外,shell=0和shell=1有什么区别。谢谢
  • 如果 shell=1,您没有执行文件,您将字符串传递给您的 shell 进行评估(例如“ls -la ~/”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多