subprocess.Popen():OSError:[Errno 8] python中的exec格式错误?

Ami*_*rma 36 python linux shell

昨天,我编写并运行了一个python script,它执行一个shellusing subprocess.Popen(command.split())where命令是字符串,它构成了.sh脚本及其参数.这个脚本工作正常,直到昨天.今天,我运行相同的脚本,现在我不断遇到这个错误.

p=subprocess.Popen(shell_command.split())
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
Run Code Online (Sandbox Code Playgroud)

我知道在提出这个问题之前有过类似的问题,但在我的情况下,我尝试了一切不能解决我目的的问题.使用shell=True不起作用,因为我的shell脚本调用另一个shell脚本,在此脚本之前必须设置一些环境才能运行该脚本.我严重陷入困境.我只是重启我的系统一次.我在用ubuntu 12.04

编辑:

 import subprocess
 import os
 import sys

 arg1=sys.argv[1]
 arg2=sys.argve[2]

 shell_command = 'my_path/my_shell.sh ' + arg1 + ' '+ arg2
 P = subprocess.Popen(shell_command.split())
 P.wait()
Run Code Online (Sandbox Code Playgroud)

my_shell.sh:

  arg1=$1
  arg2=$2

  cd $TOP
  setup the environment and run shell script
  build the kernel ...
  execute shell command .....
Run Code Online (Sandbox Code Playgroud)

Wil*_*tri 86

我通过将此行放在被调用的shell脚本的顶部来解决这个问题:

#!/bin/sh

这将保证系统在运行脚本时始终使用正确的解释器.

  • 对我来说更有意义的解决方案,谢谢! (3认同)
  • 工作了!谢谢! (3认同)
  • 遇到了类似的问题([Errno 8] Exec 格式错误),这是由于在设置文件的执行位时缺少适当的 shebang 造成的。在`chmod -x` 之后问题就解决了。这个答案让我走上了正确的轨道,所以谢谢:) (2认同)

小智 18

以下声明为我工作

subprocess.Popen(['sh','my_script.sh'])

  • @nyuvec不确定你在哪个平台上; 任何远程Unix-y肯定会在`PATH`中有`sh`. (2认同)

tri*_*eee 4

该错误消息表明外部程序不是有效的可执行文件。