gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:22:41 25 4
gpt4 key购买 nike

我正在编写一个 python 3 脚本来做一些工作(学校目的)。所以我需要调用我的 JAR。我为此使用 subprocess.check_output 。

 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

这对我来说没有任何意义。谁能帮我 ?谢谢 !完整的代码如下(我也尝试过绝对路径):)

import subprocess
import os
import re

FILE_NAME = "input_file"
JAR_NAME = "my_jar.jar"
TEST_ITER = 5

def bench(bf_file, stats_file):
java_out = subprocess.check_output("java -jar "+ JAR_NAME + " -p " + FILE_NAME, shell=True)
print(java_out)
m = re.search(".*EXEC_TIME : (\d*) ms.*EXEC_MOVE : (\d*)", java_out)
return [m.group(0), m.group(1)]

def init_stats(f):
f.write("Iterations; Exec time; exec move")

def write_file(f):
f.write("+++")

def main():

bf_file = open(FILE_NAME, "w", encoding="utf-8")
stats_file = open("bench-result.csv", "w")

write_file(bf_file)
init_stats(stats_file);

result_list = []
for i in range(0,TEST_ITER):
result_list.append(bench(bf_file, stats_file))
average_time = 0;
for res in result_list:
average_time += res[0]
average_time /= TEST_ITER;
stats_file.write(average_time + ";" + result_list[0][1])



main()

编辑:我还尝试了 java_out = subprocess.check_output(["java", "-jar", "my_jar.jar", "-p", "input_file"], shell=True),它没有改变。

编辑2:使用绝对路径或os.system相同的结果

* 解决方案 *由于我以写入模式打开文件,因此我的 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 程序中是否有任何内容可能导致它需要某种类型的输入流?

关于java - python - JAR 在终端中工作,但不能在 python 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41027819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com