Python Java-使用subprocess.Popen从Python脚本调用JAR时类文件版本错误

Python Java-使用subprocess.Popen从Python脚本调用JAR时类文件版本错误,java,python,Java,Python,我有一个用jdk13编译的java程序,并在运行它的服务器上安装了jdk13。如果我从命令行运行该程序,就不会有问题,但是当我使用subprocess.Popen从python脚本调用它时,我在stderr中得到了这个错误消息 has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recogniz

我有一个用jdk13编译的java程序,并在运行它的服务器上安装了jdk13。如果我从命令行运行该程序,就不会有问题,但是当我使用subprocess.Popen从python脚本调用它时,我在stderr中得到了这个错误消息

has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recognizes class file versions up to 55.0

这怎么可能通过python脚本而不是在命令行中手动运行它时发生呢?

您的python脚本可能使用了不同的环境,其中
java
的含义不同(id est,指向不同的可执行文件)

尝试直接调用,您可以在命令行中找到
哪个java

如何通过python脚本实现这一点,而不是在命令行中手动运行它

基本上,与一起使用的java版本取决于:

  • 您使用的完整路径名;e、 g.
    /usr/bin/java
  • PATH
    环境变量(如果使用简单的命令名启动);e、 g.
    java
我们看不到您的python脚本在做什么,但是有很多方法可以让您获得不同的行为

  • 脚本可能对
    java
    使用不同的完整路径名
  • Python或您的Python脚本可能会覆盖
    PATH
  • 您可以通过一个shell脚本启动python脚本,该脚本以不同的方式设置
    PATH
    。请注意,shell初始化相当复杂,通常它会根据运行的init文件设置路径
  • 如果您使用的是
    sudo
    ,则会覆盖
    PATH
  • 命令提示符中的
    路径设置可以“手动”设置

  • 这只是一些更可能的可能性…

    在命令行中使用java-version会为我提供正确的版本13,正如Stephen在另一个答案中所建议的,还要检查
    CLASSPATH
    java\u HOME
    变量。同时检查您是否在正确的目录中。请共享整个错误消息。