Java python-JAR在终端中工作,但不在python中工作

Java python-JAR在终端中工作,但不在python中工作,java,python,python-3.x,terminal,subprocess,Java,Python,Python 3.x,Terminal,Subprocess,我正在编写一个Python3脚本,用于做一些板凳练习。所以我需要调用我的JAR。 为此,我使用subprocess.check_输出 java_out = subprocess.check_output("java -jar my_jar.jar -p input_file", shell=True) 在终端,它工作正常,我得到了预期的输出,退出代码是0。 但在python中,我得到了以下信息: Syntax error. (One of my java exception, but it

我正在编写一个Python3脚本,用于做一些板凳练习。所以我需要调用我的JAR。 为此,我使用subprocess.check_输出

 java_out = subprocess.check_output("java -jar my_jar.jar -p input_file", shell=True)
在终端,它工作正常,我得到了预期的输出,退出代码是0。 但在python中,我得到了以下信息:

Syntax error. (One of my java exception, but it might not happen in this case)
Traceback (most recent call last):


 File "C:/Users/Jeremy/PycharmProjects/bench_bf/bench_script.py", line 41, in <module>
    main()
  File "C:/Users/Jeremy/PycharmProjects/bench_bf/bench_script.py", line 32, in main
    result_list.append(bench(bf_file, stats_file))
  File "C:/Users/Jeremy/PycharmProjects/bench_bf/bench_script.py", line 10, in bench
    java_out = subprocess.check_output("java -jar my_jar.jar -p input_file", shell=True)
  File "C:\Python34\lib\subprocess.py", line 620, in check_output
    raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command 'java -jar my_jar.jar -p input_file' returned non-zero exit status 5

Process finished with exit code 1
编辑:我还尝试了java_out=subprocess。检查输出[java,-jar,my_jar.jar,-p,input_file],shell=True,它不会改变任何内容

编辑2:使用绝对路径或操作系统获得相同结果

*解决方案*
由于我以写模式打开文件,我的jar无法打开它,并且认为它是空的…谢谢我的朋友DjNikita:

我的第一个想法是,您的环境中有一些东西没有转移到子流程。试试这个,看看它是否输出了任何看起来相关的东西

import os
for key in os.environ:
    if any(token in key.lower() for token in ['java', 'jre', 'jdk']):
        print(key, os.environ[key])

我也有另一个想法。一些程序期望他们的输入是一个tty的交互式终端,当他们被送入管道时会生气。Java程序中是否有任何东西可能导致它需要某种类型的输入流?

尝试指定jar文件的绝对路径,因为可能是您的子进程没有运行您认为的目录


例如,尝试运行'dir'并查看它返回的位置。也许检查一下“java-V”的版本标志?此时无法进行检查,返回指示Java运行的内容,而不是错误。基本上,尝试通过Python运行一个简单的东西,然后扩展它。

谢谢您的帮助!我的JAVA_主页很好,我得到了好的jdk版本,我添加了另一个可能存在的问题。我的JAVA只需要一个文件名,然后用BufferedReader读取它。我想是的,你试过java和my_jar.jar的完整路径吗?我运行了你的代码,但我没有我的_jar.jar,我得到了相同的错误。是的,我尝试过这种可能性,但无论如何还是感谢你的帮助!有什么例外?无效的语法,他不认识我的“+”,他应该。但是,当我在java代码中添加打印时,打印就像skippedWith absolute paths是同一个错误吗?我尝试了dir,它是一个好的目录,即使使用absolute paths它也不起作用……嗯,我真的希望投反对票的人能对他们反对的内容发表评论。我希望这不是OP,因为有两件事需要尝试,而且还不清楚java调用的验证是否已经尝试过……如果这是你的意思,我没有投反对票;每一条评论都是有帮助的,如果不成功的话就更是如此,因为它展示了我希望的另一种思考方式!正如我所说的,我会尝试检查java是否正在运行,可能只是没有jar文件的基本命令,如果可以,则使用helloworld.jar,等等。如果您能够进入某个工作阶段,则比目前更容易缩小出错的部分。
import os
for key in os.environ:
    if any(token in key.lower() for token in ['java', 'jre', 'jdk']):
        print(key, os.environ[key])