我很难解析subprocess.Popen的参数。我正试图在我的Unix服务器上执行一个脚本。在shell提示符下运行时的脚本语法如下:
/usr/local/bin/script hostname = <hostname> -p LONGLIST
。无论我如何尝试,脚本都不会在subprocess.Popen中运行
“=”前后的空格是必需的。
import subprocess
Out = subprocess.Popen(['/usr/local/bin/script', 'hostname = ', 'actual server name', '-p', 'LONGLIST'],shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
上述方法不起作用。
当我使用shell=False时,我得到OSError: [Errno 8] Exec format error
我将劫持此线程,指出当Popen的目标不可执行时,也可能发生此错误。当我无意中用zip文件重写了一个完全可执行的二进制文件时,我很难理解这一点。
如果您认为“=”之前和之后的空格是必需的,请将其作为列表中的单独项目进行尝试。
如果shell脚本顶部没有shebang行,并且您正试图直接执行脚本,则可能会发生
OSError: [Errno 8] Exec format error
。下面是一个重现这一问题的例子:要解决这个问题,只需添加shebang,例如,如果它是一个shell脚本;在脚本的顶部预处理
#!/bin/sh
:它执行
exit 0
时没有任何错误。在POSIX系统上,shell解析命令行,也就是说,如果
script
是:然后在shell中运行:
产生:
注意:在
'='
周围没有空格。我在<hostname>
周围添加了引号,以转义重定向元字符<>
。要在Python中模拟shell命令,请运行:
注:无
shell=True
。而且不需要转义<>
,因为没有运行shell。"Exec format error"
可能表示您的script
格式无效,请运行:找出它是什么。将架构与以下输出进行比较:
相关问题 更多 >
编程相关推荐