“无法找到主类”错误使用subprocess.Popen调用java程序,而同一个调用只能使用os.system工作

时间:2011-08-29 19:18:04

标签: java python path external popen

我正在编写一个调用另一个java程序的脚本来执行某些任务。当且仅当前一个任务完成时,每个任务开始是非常重要的。每个任务可能会运行几天,产生大量输出。它适用于庞大的数据库

我注意到如果我使用os.system()运行脚本,它会运行第一个任务几分钟,然后由于某种原因启动第二个任务,尽管第一个任务没有完成。第一项任务通常没有结束,就像突然停止工作一样。如果我在较小的数据库上尝试它,只需几分钟即可处理,一切正常。

我不明白为什么它会这样!

出于这个原因,我试图使用Popen(),所以我可以使用communic()来等待,直到被调用的进程结束。

由于某种原因,调用外部java程序的相同命令与os.system()一起工作,而它说它找不到带有Popen()的main()。我正在使用相对路径,我也尝试了绝对路径而没有运气。

是否有替代Popen()?但是,我不明白为什么它找不到主类。调用外部程序时,os.system()和Popen()之间的区别是什么?我该如何解决或解决我的问题?

这是代码:

import os
from subprocess import Popen

def doWork():

    owd = os.getcwd()
    cmd = "java -Dfile.encoding=Cp1252 -classpath \"bin;lib\\mysql-connector-java-5.0.8-bin.jar;lib\\sqlitejdbc-v056.jar\" core.ODBManager"
    os.chdir("ODBManager")

    #this way does not work
    p = Popen(cmd + "1", shell=True) #import
    p.communicate() #now wait

    p = Popen(cmd + "2", shell=True) #convert
    p.communicate() #now wait

    p = Popen(cmd + "3", shell=True) #export
    p.communicate() #now wait

    #this way works but does not wait the command to finish
    #before starting another one
#   os.system(cmd+" 1") #import
#   os.system(cmd+" 2") #convert
#   os.system(cmd+" 3") #export

    os.chdir(owd)
谢谢你。如果事情不明确,请随意提问。 附: java程序(使用eclipse构建)位于子文件夹中,它从另一个子文件夹中的文件中读取一些输入,因此我不得不使用chdir,否则无法找到该文件。

1 个答案:

答案 0 :(得分:3)

不确定这是否是一个拼写错误,但在你所描述的“不起作用”的方式中,你在cmd和连接的“1”,“2”和“3”字符串之间没有空格。使用os.system调用,您可以拥有空间。没有空间,您实际上正在更改要执行其主要方法的类的名称,因此您会报告错误。