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

标签 java python parsing rdf processbuilder

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

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

输入.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中无法运行的问题 enter image description here

最佳答案

您的脚本运行,但未到达“第 2 步”,因此

gUpdate.parse("BBCOntology.rdf" )

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

从 Python 进程中读取错误流并用 Java 打印出来可能是值得的。使用 p.getErrorStream() 的方式与使用 p.getInputStream() 的方式相同。

或者,更简单的是,将异常处理程序添加到您的 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 进程应该打印该消息,这可能会提供信息。

关于java - process Builder java无法运行java中的某些python代码。怎么解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39871474/

相关文章:

python - 通过 pyathena 运行 aws athena 查询

javascript - 解析半结构化值

string - 如何在非双引号的字符串上使用 read ?

java - 为什么我的方法返回空值?

python lxml : import XSD from a buffer?

java - 听Java中的类

java - 使用编程获取一张图像的R,G,B的最大值

.net - 在 .NET 中获取 HTML 元素信息

java - 什么是套接字绑定(bind)以及如何绑定(bind)地址?

java - EJB/JSF java.lang.ClassNotFoundException : com. ericsantanna.jobFC.dao.DAOFactoryRemote 来自本地模块加载器的 [模块 "com.sun.jsf-impl:main"]