使用java编译python代码

时间:2015-03-19 11:20:08

标签: java python

我正在尝试使用Java编译Python代码。 Python代码打开一个csv文件并将数据保存到其他csv文件。

    import os
    from stat import*
    import csv

    data = []
    with open('Example.csv') as f:
        reader = csv.reader(f, delimiter = ',')
        for row in reader:
            data.append(row)

    f = open("Clearprint.csv","w")
    f.truncate()
    f.close()

    with open('Clearprint.csv','w',newline='') as fp:
        a = csv.writer(fp,delimiter = ',')
        a.writerows(data)

Python代码可以正常工作,但是当我尝试通过Java编译它时,没有任何事情发生。

    class test1{

        public static void main(String[] args) throws IOException {
            String pythonScriptPath = "C:/Masters/Python/helloPython.py";
            String[] cmd = new String[2];
            cmd[0] = "C:/Python33/python.exe";
            cmd[1] = pythonScriptPath;

            Runtime rt = Runtime.getRuntime();
            Process pr = rt.exec(cmd);

            BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getInputStream()));
            String line = "";
            while((line = bfr.readLine()) != null) {
                System.out.println(line);
            }
        }   
    }

如果Python代码只有一个打印命令,一切正常,所以它可能与我使用csv有关。请注意,我不需要从Python返回Java或将其发送到Python。我只想让Java启动Python代码,让Python做其他事情。

谢谢

1 个答案:

答案 0 :(得分:1)

这里的术语有点不对,这使问题混乱。您正试图通过从java调用python解释器来运行一个python脚本。

据推测,python子进程会抛出一些错误(就像它找不到文件一样)并且java进程没有告诉你那个错误是什么。这里的解决方案是实际捕获java中的错误,并将其打印出来:

 BufferedReader err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
    String line = "";
    while((line = err.readLine()) != null) {
        System.err.println(line);
    }

那就是说,我同意在jython中这样做可能会更好 - 或者只是在java中重写python部分 - 我知道,java中的IO和字符串处理是一种痛苦,但不如多语言项目可以是:)