我的代码如下:
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".
有什么解决办法吗?谢谢!你知道吗
communicate()
等待进程终止,这就解释了第二次调用时出现的错误,即进程不再运行。你知道吗这实际上取决于JAR是如何编写的,以及它所期望的输入类型。如果它支持基于输入多次执行其操作,并且您可以用这种方式重新格式化输入,那么它就可以工作了。如果JAR只做一次就终止了,你就无能为力了。你知道吗
如果您不介意编写一点Java,可以在
action.jar
中的类周围添加一个包装器,它依次获取两个示例输入并将它们传递给jar中的代码。你知道吗使用Nailgun这样的工具可以节省启动Java虚拟机的成本。你知道吗
相关问题 更多 >
编程相关推荐