使用subprocess.Popen调用Java程序时出现“找不到主类”错误,而使用os.system则相同的调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用subprocess.Popen调用Java程序时出现“找不到主类”错误,而使用os.system则相同的调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1815字,纯文字阅读大概需要3分钟。
内容图文
![使用subprocess.Popen调用Java程序时出现“找不到主类”错误,而使用os.system则相同的调用](/upload/InfoBanner/zyjiaocheng/654/31a52ddaddf94f4a82bafdc45777d87e.jpg)
我正在编写一个脚本,该脚本调用另一个Java程序来执行一些任务.当且仅当前一个任务完成时,才开始每个任务,这一点非常重要.每个任务可能要运行几天,从而产生大量输出.它适用于巨大的数据库
我注意到,如果我使用os.system()运行脚本,它会在第一个任务上运行几分钟,然后由于某种原因启动第二个任务,尽管第一个任务没有完成.第一项任务没有正常结束,就像突然停止工作一样.如果我在一个较小的数据库上尝试,只需几分钟即可处理,那么一切都很好.
我不明白为什么会这样!
由于这个原因,我试图使用Popen(),所以我可以使用communication(),以便等到调用过程结束.
由于某种原因,用于调用外部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,否则找不到该文件.
解决方法:
不确定这是否是错字,但是按照您所说的“不起作用”的方式,cmd与串联的“ 1”,“ 2”和“ 3”字符串之间没有空格.使用os.system调用,您确实有空间.如果没有空格,则实际上是在更改要执行其主要方法的类的名称,因此会报告错误.
内容总结
以上是互联网集市为您收集整理的使用subprocess.Popen调用Java程序时出现“找不到主类”错误,而使用os.system则相同的调用全部内容,希望文章能够帮你解决使用subprocess.Popen调用Java程序时出现“找不到主类”错误,而使用os.system则相同的调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。