调用
import subprocess
print subprocess.Popen(['java', '-version'])
给出错误
OSError: [Errno 8] Exec format error
但是可以通过将上面的内容改为
来解决print subprocess.Popen(['java', '-version'], executable='/bin/sh')
如何以相同的方式修复sh.Command?
import sh
print sh.Command('java').bake('-version')()
因为它会给出完全相同的错误,
OSError: [Errno 8] Exec format error
答案 0 :(得分:1)
试试这个
if sys.platform == 'darwin':
java = sh.Command('/bin/sh').bake('java')
else:
java = sh.Command('java')
print java.bake('-version')()
答案 1 :(得分:0)
@nosklo的回答肯定会按照我的要求行事,并且我会将其作为正确答案,但并不是我的问题所在。< / p>
基本上,正如@nosklo在irc上暗示的那样,当文件之间存在混淆,处理像脚本这样的二进制文件或像二进制文件这样的脚本时,就会出现这种错误。所以在构建机器上肯定指向java。
which java
/usr/bin/java
ls -la /usr/bin/java
/usr/bin/java -> java.new
cat /usr/bin/java
' java.old -Djava.awt.headless=true "$@" '
ls -la /usr/bin/java.old
/usr/bin/java.old -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
My Java,/ usr / bin / java,是一个可执行脚本的符号链接,java.new文件没有shebang ,它将所有内容转发到java.old,这是一个符号链接到主要Java ...
谈论复杂,但希望这可能会帮助那些无法轻松解决问题的人。