Process Builder java 无法 运行 java 中的某些 python 代码。怎么解决?

process Builder java cannot run some of the python code in java. How to solve?

我正在使用 java 为 运行 python 创建 ProcessBuilder。

两个py都可以在python程序中运行成功。 (两个py代码都没有问题)

input.py:

print 'hello'  
number=[3,5,2,0,6]  
print number  
number.sort()  
print number  
number.append(0)  
print number  
print number.count(0)  
print number.index(5)

TESTopenBaseOnt.py:

from rdflib import URIRef, Graph, Namespace
from rdflib.plugins.parsers.notation3 import N3Parser
from rdflib.namespace import RDF, OWL, RDFS
from rdflib import URIRef, BNode, Literal
from rdflib import Namespace
from rdflib.namespace import RDF, FOAF, RDFS
from rdflib import Graph

gUpdate = Graph()
print ".> Step....1"
gUpdate.parse("BBCOntology.rdf" )
print ".> Step....2"
print gUpdate.serialize(format='xml')
print ".>  Finished......."
#

如你所见。

代码适用于 python:input.py 但是,它不适用于 python:TESTopenBaseOnt.py
可能是因为java不能运行python中的parse函数。结果显示,程序停在step1.

public static void main(String [] args) throws IOException
    {

        try

        {
        ProcessBuilder pb = new ProcessBuilder("C:/Python27/python","C:Desktop//searchTestJava//input.py");

//      ProcessBuilder pb = new ProcessBuilder("C:/Python27/python","C:Desktop//searchTestJava//TESTopenBaseOnt.py");



        Process p = pb.start();
        BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));

        System.out.println(".........start   process.........");  
        String line = "";     
        while ((line = bfr.readLine()) != null){
            System.out.println("Python Output: " + line);
        }

        System.out.println("........end   process.......");


        }catch(Exception e){System.out.println(e);}


    }

那么如何解决python不能在java中运行的问题

您的脚本运行了,但没有达到 "Step 2",所以

gUpdate.parse("BBCOntology.rdf" )

将是问题的根源。可能是因为文件 BBCOntology.rdf 不在 Python 进程的当前工作目录中。或者可能是 Python 进程没有打开该文件的权限。

可能值得从 Python 进程中读取错误流并在 Java 中打印出来。以与使用 p.getInputStream().

相同的方式使用 p.getErrorStream()

或者,更简单的方法是,将异常处理程序添加到您的 Python 代码中,以捕获异常消息并将其打印到标准输出:

import traceback

try:
    gUpdate = Graph()
    print ".> Step....1"
    gUpdate.parse("BBCOntology.rdf" )
    print ".> Step....2"
    print gUpdate.serialize(format='xml')
    print ".>  Finished......."
except Exception as exc:
    traceback.print_exc()
    raise exc

然后您的 Java 进程应该会打印消息,这可能会提供信息。

gUpdate = Graph()
print ".> Step....1"
gUpdate.parse("D:\Desktop\searchTestJava\BBCOntology.rdf" )
print ".> Step....2"       

BBCOntology.rdf 在 Python 进程的当前工作目录中。因此,即使我写成 (gUpdate.parse("BBCOntology.rdf" )),该程序也可以在 python 中运行。

但是,java 不知道目录 BBCOntology.rdf 与 TESTopenBaseOnt.py 相同。 一旦我添加了 gUpdate.parse("D:\Desktop\searchTestJava\BBCOntology.rdf" ) , Java 就可以工作了。