有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Python与java

有没有办法从Python中调用Java程序,而不是使用Jython

这个Java程序包含一些函数,我需要给Java代码提供一个输入文件,它返回两个值,我将在Python中使用这两个值。因此Python程序将一个文件名传递给Java代码,Java代码将为该文件中的每一行返回两个值

例如,我有一个包含如下数据的文件:

22      16050408        2       2184    T:0.938645      C:0.0613553
22      16050612        2       2184    C:0.915751      G:0.0842491
22      16050678        2       2184    C:0.94826       T:0.0517399
22      16050984        2       2184    C:0.997711      G:0.00228938
22      16051107        2       2184    C:0.94185       A:0.0581502

我需要给Java程序一个文件,它将为该文件的每一行返回两个值。因此,在包含上述数据的文件中,输入到java代码的行数将是相同的。我需要用两列替换第二列。。i、 e.Java返回的值

请帮忙


共 (2) 个答案

  1. # 1 楼答案

    您可以随时将java程序称为命令行工具——这样一来,该程序使用何种语言就无关紧要了。为此,我建议使用subprocess模块。甚至可以通过管道将输入/输出传输到python程序,而无需使用文件系统上的任何临时文件。以下示例运行java应用程序并获取其输出:

    prog = subprocess.Popen(["/usr/bin/java", "TestClass"], stdout=subprocess.PIPE)
    print prog.stdout.read() 
    

    另一个选项,尽管涉及更多,将使用py4j

    Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects. Py4J is distributed under the BSD license.

    我觉得这听起来像是你在做的事情

    Py4J的优点是,它是一个更具可移植性的解决方案,使用套接字在java和python程序之间进行通信——您不是在python环境中运行JVM,而是与运行Py4J网关的现有JVM实例进行“通信”

  2. # 2 楼答案

    你可以试试JPype

    以下是文档中关于用法的引用:

    from jpype import * 
    startJVM("d:/tools/j2sdk/jre/bin/client/jvm.dll", "-ea") 
    java.lang.System.out.println("hello world") 
    shutdownJVM() 
    

    这将启动一个专用的JVM,您可以在其中运行Java代码,从Python透明地调用它

    虽然在你的例子中,我相信你真的可以把你的例程作为一个子进程来运行,如果你将来需要的话,还可以很容易地从Java切换到其他任何东西