【问题标题】:Exec format error when calling Java from python with sh.Command使用 sh.Command 从 python 调用 Java 时执行格式错误
【发布时间】:2014-10-02 17:26:54
【问题描述】:

打电话

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

【问题讨论】:

    标签: java python subprocess exec sh


    【解决方案1】:

    试试这个

    if sys.platform == 'darwin':
        java = sh.Command('/bin/sh').bake('java')
    else:
        java = sh.Command('java')
    
    print java.bake('-version')()
    

    【讨论】:

      【解决方案2】:

      @nosklo 的回答确实符合我的要求,我会将其保留为正确答案,但这 不是我的问题所在。

      基本上,正如@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
      

      我的 Java,/usr/bin/java,是一个指向可执行脚本的符号链接,java.new 文件没有 shebang,它将所有内容转发到 java.old,它是指向主要的 Java...

      谈谈令人费解的问题,但希望这可以帮助那些无法轻松解决问题的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-14
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多