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 shell时得到的完全相同的输出。这让我相信,不知何故, subprocess.call 并没有阅读每一个论点。是这种情况吗?我应该如何让它正确评估这个命令?

请注意,这个命令可以正确地手动输入到 shell 中,但是使用这个脚本背后的动机是让它循环遍历mineps以及训练文件的值,以便我可以自动执行这些。

4

1 回答 1

0

我不认为它忽略了参数,但除非必要,否则我会尽量避免使用 Shell 参数,有时它会出现奇怪的行为(与命令行解析相关,而不是 python)。

我对Java一无所知,但我敢打赌你给了它错误的参数,输出错误没有告诉我们任何东西(除了java找到它并且它没有得到正确的参数,这并不意味着它没有得到任何参数)。

尝试调试您传递给 subprocess.call 的字典(即使在上一行中使用简单的 print 或import pdb调用来pdb.set_trace()获取调试器),并检查带有这些参数的命令是否按预期工作。

我知道这不是一个正确的答案,但这对于评论行来说太长了。

于 2012-04-09T14:42:57.410 回答