从JAVA中调用Python脚本和MySQLdb导入

3 投票
1 回答
581 浏览
提问于 2025-04-17 18:13

我在我的Java代码中调用一个Python脚本。以下是代码:

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

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

        // set up the command and parameter
        String pythonScriptPath = "my-path";
        String[] cmd = new String[2];
        cmd[0] = "python2.6";
        cmd[1] = pythonScriptPath;

        // create runtime to execute external command
        Runtime rt = Runtime.getRuntime();
            Process pr = rt.exec(cmd);

        // retrieve output from python script
        BufferedReader bfr = new BufferedReader(new InputStreamReader(
                pr.getInputStream()));
        String line = "";
        while ((line = bfr.readLine()) != null) {
            // display each output line form python script
            System.out.println(line);
        }
    }

}

python.py 这个能正常工作

import os
from stat import *

c = 5
print c 

python.py 这个不能正常工作

import MySQLdb
import os
from stat import *

c = 5
print c 
# some database code down 

现在我正处于一个关键阶段,因为我有一个创业项目的截止日期,我需要向客户展示我的MVP项目。我本来想这样调用Python脚本。没有数据库连接和MySQLdb库时,它能正常打印任何东西。但是一旦我加上这些,它就无法运行Python脚本了。这里到底出了什么问题?难道不应该处理所有输入并运行这个过程吗?我已经安装了MySQLdb,而且这个脚本在没有Java代码的情况下可以运行。

我知道这不是解决问题的最佳方法。但为了向客户展示一些东西,我需要这个功能正常工作。有什么建议吗?

1 个回答

0

所以,我发现问题出在我用Java运行Python程序时传递的参数上。

我最开始传的第一个参数是 - python 2.6,但其实应该只写 python,而不是带上版本号,因为这样会和MySQLdB不兼容。

最后,我决定在Python代码中使用MySQL的Python连接器,而不是MySQLdB。这样一来,问题就解决了,效果非常好!

撰写回答