在python脚本中调用java程序:Classpath错误

时间:2013-07-10 18:12:41

标签: java python classpath subprocess

我正在运行一个python脚本,主要是关于信息检索。由于脚本的一次执行需要很长时间,因此我想运行并行脚本。我在我的脚本中使用以下代码调用java程序:

x='java -cp "lib/*:esalib.jar" clldsystem.esa.ESAAnalyzer %s %s' % (word1, word2)
args=shlex.split(x)
print args
p=subprocess.Popen(args)
p.wait()

工作正常。为了不混淆输入文件和临时结果文件,我在包含脚本的文件夹中创建了一个新文件夹。我现在正在尝试从新文件夹运行脚本的副本。我将代码更新为:

x='java -cp "../lib/*:esalib.jar" ../clldsystem.esa.ESAAnalyzer %s %s' % (word1, word2)
args=shlex.split(x)
print args
p=subprocess.Popen(args)
p.wait()

但这会产生错误:

Error: Could not find or load main class ...clldsystem.esa.ESAAnalyzer

我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题在于您将..点放在错误的位置。

clldsystem.esa.ESAAnalyzer是包含main()方法的Java类,由java执行。 java尝试通过clldsystem.esa.ESAAnalyzer查看从类路径中指定的jar加载的类来查找-cp

所以尝试替换

java -cp "../lib/*:esalib.jar" ../clldsystem.esa.ESAAnalyzer

以下内容:

java -cp "../lib/*:../esalib.jar" clldsystem.esa.ESAAnalyzer