나는 벤치 (학교 목적)를 수행하기 위해 python 3 스크립트를 작업하고 있습니다. 그래서 JAR을 호출해야합니다. 그것에 대해 subprocess.check_output을 사용합니다. 잘 작동 터미널에서python - JAR는 터미널에서 작동하지만 파이썬에서는 작동하지 않습니다.
java_out = subprocess.check_output("java -jar my_jar.jar -p input_file", shell=True)
, 내가 예상 출력하고 종료 코드가 0 입니다 그러나 파이썬에서, 나는이를 얻을 수 : 나에게 어떤 이해가되지 않습니다
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.check_output ([ "자바", "-jar", "my_jar.jar : 전체 코드는 (나는 또한 절대 경로로 시도했습니다) :
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()
편집을 따르고 ","-p ","input_file "], shell = True), 아무 것도 변경하지 않습니다.
편집 2 : 절대 경로 또는 os.system을을 사용하여 동일한 결과
* 해결 방법 * 내가 쓰기 모드로 파일을 열 때문에, 내 항아리를 열고이 비어 고려하지 수 있습니다 ... 감사합니다 내 친구 DjNikita :)
'java'와'my_jar.jar'에 대한 전체 경로를 시도 했습니까? 나는 당신의 코드를 실행한다. (그리고 나는'my_jar.jar'을 가지고 있지 않다.) 나는 같은 에러를 얻는다. – furas
예이 가능성을 시도했지만 어쨌든 도움에 감사드립니다! –
예외는 무엇입니까? – Kariamoss