从Python调用JAR

2024-03-29 05:54:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下:

from subprocess import Popen, PIPE, STDOUT 

p = Popen(['java', '-jar', 'action.jar'], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
stdout1, stderr1 = p.communicate(input=sample_input1)
print "Result is", stdout1

p = Popen(['java', '-jar', 'action.jar'], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
stdout2, stderr2 = p.communicate(input=sample_input2)
print "Result is", stdout2

装罐子要花很多时间而且效率很低。有没有办法避免第二次重新加载它,在第二行p=Popen(…)中,即只在开始时加载一次,然后继续使用该实例?我试图删除第二行失败,Python抱怨:

"ValueError: I/O operation on closed file". 

有什么解决办法吗?谢谢!你知道吗


Tags: sampleinputstderrstdinstdoutactionjavaresult
1条回答
网友
1楼 · 发布于 2024-03-29 05:54:17

communicate()等待进程终止,这就解释了第二次调用时出现的错误,即进程不再运行。你知道吗

这实际上取决于JAR是如何编写的,以及它所期望的输入类型。如果它支持基于输入多次执行其操作,并且您可以用这种方式重新格式化输入,那么它就可以工作了。如果JAR只做一次就终止了,你就无能为力了。你知道吗

如果您不介意编写一点Java,可以在action.jar中的类周围添加一个包装器,它依次获取两个示例输入并将它们传递给jar中的代码。你知道吗

使用Nailgun这样的工具可以节省启动Java虚拟机的成本。你知道吗

相关问题 更多 >