昨天,我编写并运行了一个python script
,它使用subprocess.Popen(command.split())
来执行shell
,其中command是字符串,它构成了.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
我知道以前有人问过类似的问题,但在我的情况下,我尝试了所有无法解决我的目的的方法。使用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()
- 我的 shell . sh:**
arg1=$1
arg2=$2
cd $TOP
setup the environment and run shell script
build the kernel ...
execute shell command .....
8条答案
按热度按时间zbwhf8kr1#
我通过在调用的shell脚本的顶部添加以下代码行来解决这个问题:
#!/bin/sh
这将保证系统在运行脚本时始终使用正确的解释器。
ht4b089n2#
以下语句对我有效
subprocess.Popen(['sh','my_script.sh'])
fnvucqvd3#
错误消息表明外部程序不是有效的可执行文件。
bzzcjhmw4#
正如@tripleee所说,执行脚本时出现问题。请确保:
另请参阅:Why is '#!/usr/bin/env python' supposedly more correct than just '#!/usr/bin/python'?
qgelzfjb5#
如果二进制文件不打算在您的系统上运行,也可能发生这种情况。
我在OSX上,但是我运行的二进制文件并不适用于OSX,正如我在使用
file path/to/binary
时所看到的:sg3maiej6#
错误是因为可执行文件没有以指定的格式提供给子进程来执行它。
示例:
subprocess.call(shell_command1)
或subprocess.Popen(shell_command1)
将无法运行shell_command1,因为子进程需要可执行命令(如mailx、ls、ping等)或可执行脚本(如shell_command2),或者您需要指定如下命令但是,您也可以使用
os.system()
或os.Popen()
m3eecexj7#
我目前也面临着同样的问题。我注意到使用
shell=True
参数,如subprocess.Popen(shell_command.split()
,shell=True)的工作原理与预期相同。5jvtdoz28#
建议安装binfmt-support包,帮助系统更好的识别scipts,无论scipts是否有shebang行都有帮助。