0

次のコードを介してpythonで外部プログラムを繰り返し実行しようとしています...

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.12510です。

私のpythonコードを実行すると、次のエラーが発生します。

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ことです。

4

1 に答える 1