Skip to main content
 首页 » 编程设计

Python子进程Exec格式错误

2025年05月04日7kevingrace

对不起,如果这个问题很愚蠢。我正在使用 python subprocess 语句在 Ubuntu (Natty 11.04) 中调用 .bat 文件,但是,我收到错误消息:

Traceback (most recent call last): 
  File "pfam_picloud.py", line 40, in <module> 
    a=subprocess.Popen(src2, shell=0) 
  File "/usr/lib/python2.7/subprocess.py", line 672, in __init__ 
    errread, errwrite) 
  File "/usr/lib/python2.7/subprocess.py", line 1213, in _execute_child 
    raise child_exception 

运行这个python文件

$python pfam_picloud.py 

Python代码(pfam_picloud.py)

#!/usr/bin/python 
# 
met="wTest.dvf" 
run="run_pfam.bat" 
inp="pfam_input.PFA" 
import os 
import stat 
import shutil 
import subprocess 
import string 
import random 
# Generate a random ID for file save 
def id_generator(size=6, chars=string.ascii_uppercase + string.digits): 
    return ''.join(random.choice(chars) for x in range(size)) 
name_temp=id_generator() 
cwd=os.getcwd() 
src=cwd 
src1=cwd+'/'+name_temp 
if not os.path.exists(src1): 
    os.makedirs(src1) 
else: 
    shutil.rmtree(src1) 
    os.makedirs(src1) 
## 
shutil.copy(src+"/"+run,src1) 
shutil.copy(src+"/"+met,src1) 
shutil.copy(cwd+"/pfam_pi.exe",src1) 
shutil.copy(src+"/"+inp,src1) 
# 
src2=src1+"/run_pfam.bat" 
os.chdir(src1) 
a=subprocess.Popen(src2, shell=0) 
a.wait() 

bash 文件 (run_pfam.bat)

#!/bin/sh 
./pfam_pi.exe pfam_input.PFA 

我可以在 Ubuntu 中成功运行这个 bash 文件。所以我想,我搞砸了我的 Python 脚本中的一些东西。谁能给我一些建议?感谢您的任何意见。

编辑

文件 pfam_pi.exe 是一个 Linux 可执行文件。我在 Ubuntu 中编译它。抱歉造成混淆。

更新

好吧,我现在遇到了不同类型的错误。 1. #!/bin/sh,提示No such file or directory。 2. 用/bin/sh,提示exec format error。 3. 如果我将所有内容作为参数发送 a=subprocess.Popen(['./pfam_pi.exe', 'inp', 'src1'], shell=0),它说 end行符号错误

请您参考如下方法:

由于功能请求到 mark a comment as an answer仍然被拒绝,我在这里复制上面的解决方案。

@Ellioh:感谢您的评论。我发现一旦我更改了 shell=1,问题就解决了。 – tao.hong