나는 반복적으로 다음 코드를 통해 파이썬 함께 외부 프로그램을 실행하려고 의도 한대로은 ...
3 javarun='java -classpath /home/jrm6u/code/weka_dir/weka.jar'
4 java1='java'
5 java2='-classpath'
6 java3='/home/jrm6u/code/weka_dir/weka.jar'
7 weka_args='weka.clusterers.DBScan'
8 db_type='weka.clusterers.forOPTICSAndDBScan.Databases.SequentialDatabase'
9 db_dist='weka.clusterers.forOPTICSAndDBScan.DataObjects.EuclidianDataObject'
...
28 traindir = './arff_dir/'
29 trainfile = 'of3_O_0_0.arff'
30 trainer = traindir + trainfile
을 ... 행동하지 subprocess.call
45 subprocess.call([java1, java2, java3, weka_args, '-E', str(eps), '-M', str(min), '-I', db_type, '-D', db_dist, '-t', trainer], shell=True)
여기서 eps 및 min은 각각 0.125
및 10
입니다.
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.
후 더 출력 :
내 파이썬 코드의 실행시 나는 다음과 같은 오류가 발생합니다. 이것은 bash 쉘에 단순히 java
을 입력 할 때 얻는 결과와 정확히 일치합니다. 이것은 어떻게 든 subprocess.call이 모든 단일 인수를 읽지 않는다고 믿게 만듭니다. 이 경우인가요? 이 명령을 올바르게 평가하는 방법은 무엇입니까?
이 명령은 쉘에 수동으로 올바르게 입력 할 수 있지만이 스크립트를 사용하는 뒤에있는 동기는 min
및 eps
의 값과 반복적으로 실행시켜야 자동으로 실행할 수 있습니다.
당신은 하나의 문자열로 인수의 형식을 지정할 수 있다는 것을 알고 있습니다. 셸에서 실행 한 정확한 문자열을 시도하고 무슨 일이 일어나는 지보십시오. –
이 문제는 일부 인수를 변경하여 변경하기 쉽도록 분할하는 것입니다. java1, java2, java3은 처음에 하나의 문자열이었고 똑같은 문제가 생겨서 – drjrm3
을 나눠 봤습니다. 여러분은 항상 ""% s % s % s ... "'으로 서식을 지정할 수 있지만, 디버그로 제안했습니다. 단계, 해결책이 아닙니다. 또한 java 실행 파일의 정확한 경로가되도록 Java arg를 변경했습니다. BTW에서는 jython없이 python과 java를 통합 할 수 있다는 점에 유의할 가치가 있습니다. http://jpype.sourceforge.net/ 또는 https://github.com/thouis/Python-Java-Bridge –