【发布时间】:2017-04-23 00:11:25
【问题描述】:
我正在编写一个 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 :)
【问题讨论】:
-
您是否尝试过使用
java和my_jar.jar的完整路径?我运行你的代码(我没有my_jar.jar),我得到了同样的错误。 -
是的,我已经尝试过这种可能性,但无论如何感谢您的帮助!
-
有什么例外?
-
语法无效,他不认识我的“+”(他应该)。但是当我在我的 java 代码中添加打印时,打印就像“跳过”
-
使用绝对路径是不是同样的错误?
标签: java python python-3.x terminal subprocess