2016-07-06 167 views
-3

这是我的Python代码:如何调用Python函数在Java中

class myPythonClass: 
    def table(nb): 
     i = 0 
     while i < 10: 
      print(i + 1, "*", nb, "=", (i + 1) * nb) 
      i += 1 

我需要知道如何使用PythonInterpreter调用它。

+4

查看jython – syntonym

+0

只需搜索“java systemcall”;并认真:我猜上面的python代码只是打印出一些字符。你为什么要为此调用一个python解释器?什么阻止你将这几行转换成java代码? – GhostCat

+0

请查看http://stackoverflow.com/help/how-to-ask。你的“问题”不清楚。你到目前为止尝试了什么? –

回答

0

在Java中使用ProcessBuilder来创建子进程并捕获其标准输出。这里有一个例子:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.IOException; 

class CallPython { 
    public static void main(String[] args) throws IOException, InterruptedException { 
     ProcessBuilder pb = new ProcessBuilder("python", "/path/to/your/script.py", "10"); 
     Process p = pb.start(); 

     char[] readBuffer = new char[1000]; 
     InputStreamReader isr = new InputStreamReader(p.getInputStream()); 
     BufferedReader br = new BufferedReader(isr); 

     while (true) { 
      int n = br.read(readBuffer); 
      if (n <= 0) 
       break; 
      System.out.print(new String(readBuffer, 0, n)); 
     } 
    } 
} 

你的Python脚本也需要修改,以便它可以调用的函数,这实际上应该是一个静态方法,类的方法,或者仅仅是一个独立的功能。该脚本还需要nb的值,以便它可以传递给该函数 - 对此使用sys.argv。所以例如作为一种静态方法:

import sys 

class myPythonClass: 
    @staticmethod 
    def table(nb): 
     i = 0 
     while i < 10: 
      print(i + 1, "*", nb, "=", (i + 1) * nb) 
      i += 1 

if __name__ == '__main__': 
    myPythonClass.table(int(sys.argv[1]))