我试图通过以下代码重复执行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.125
和10
。
执行我的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中,但使用此脚本的动机是让它循环遍历min
和eps
的值以及训练文件以便我可以自动执行这些。
答案 0 :(得分:0)
我不认为它忽略了参数,但我会尽量避免Shell参数,除非必要,有时它有奇怪的行为(命令行解析相关,而不是python)。
我对Java一无所知,但我敢打赌你给它错误的参数,输出错误告诉我们什么都没有(除了找到java
并且它没有得到正确的参数,它没有'这意味着它没有得到任何东西。
尝试调试传递给subprocess.call的字典(即使使用简单的打印或import pdb
并调用pdb.set_trace()
以获取上一行中的调试器),并检查命令是否这些参数按预期工作。
我知道这不是一个正确的答案,但这对评论界来说太长了。