Я пытаюсь повторно выполнить внешнюю программу с питоном через следующий код ...не subprocess.call действует как задумано
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
...
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.
с последующим выходом после. это тот же самый результат, который я получаю при вводе просто java
в оболочку bash. это заставляет меня поверить, что, как-то, subprocess.call не читает каждый аргумент. это случай? как мне нужно правильно оценить эту команду?
Обратите внимание, что эта команда может быть корректно введена в оболочку вручную, но мотивация использования этого скрипта заключается в том, чтобы она проходила через значения min
и eps
, а также учебные файлы, чтобы я мог выполнять их автоматически.
Вы знаете, что вы можете просто форматировать аргументы как одну строку. попробуйте точную строку, которую вы запускали в оболочке, и посмотрите, что произойдет. –
проблема заключается в том, что я хочу изменить некоторые аргументы, поэтому я разделяю их, чтобы их было легче изменить. java1, java2, java3 были изначально одной строкой, и возникла одна и та же проблема, из-за которой я разделил их на – drjrm3
, вы всегда можете сделать форматирование самостоятельно с помощью ''% s% s% s ... "', но я предложил это в качестве отладки шаг, а не решение. Кроме того, я бы изменил java arg как точный путь к исполняемому файлу java. Кстати, стоит отметить, что вы можете интегрировать python и java без jython, используя эту библиотеку: http://jpype.sourceforge.net/ или этот: https://github.com/thouis/Python-Java-Bridge –