从Java运行python脚本:CreateProcess error = 2,系统找不到指定的文件

时间:2019-01-23 20:09:38

标签: java python process processbuilder

在您将此报告为重复报告之前,请了解我现在已经花了几个小时来研究来自多个不同网站(许多都是来自此处)的类似问题。他们对解决方案的解释不够好,无法让我接受他们的答案并将其应用于我自己的问题。如果您仍然想报告此事,请继续尝试。您要做的只是阻止我学习更好的代码。

我正在尝试调用python脚本并将其传递5个参数。我尝试了几种不同的方法来做到这一点,并相信流程构建器路线是我的最佳选择。但是,我有几个问题,因为它似乎不是正确的代码:

  1. 我是否需要为流程构建器提供可执行文件的路径,还是可以为它提供普通.py文件的路径?

  2. 我需要从python文件中收集输出吗?

如果我没有看到其他任何问题,请通知我。与互联网上相同的代码相比,我的代码看上去正确。它在下面列出:

 private void runPython(String pythonPath, HashMap<String, String> map){
     pythonPath = "C:/Users/Carlos/PycharmProjects/autoHTML/javaToExcel.py";

     try {

        ProcessBuilder pb = new ProcessBuilder(pythonPath + "/" + "python", pythonPath, map.get("Driver Advances"), map.get("Driver Loans"),
                map.get("Escrow Fund"), map.get("Maintenance Fund"), map.get("Highway Use tax - 2290"));

        Process p = pb.start();

    catch(Exception e) {
        System.out.println("Python error");
    }
}

如果您需要任何代码或需要回答的任何问题以帮助我,请告诉我。

1 个答案:

答案 0 :(得分:0)

要创建操作系统进程,可以使用带有2个参数的ProcessBuilder:

  • 要运行的过程,这里是您的Python可执行文件的路径(又称“ C:/Users/Carlos/PycharmProjects/autoHTML/javaToExcel.py/python.exe”或类似的文件)。
  • 传递给您的过程的参数:

    • 您的python脚本的路径及其自变量。

您可以尝试:

ProcessBuilder pb = new ProcessBuilder(
    "C:/Users/Carlos/PycharmProjects/autoHTML/javaToExcel.py/python.exe",
    pythonPath,
    map.get("Driver Advances"),
    map.get("Driver Loans"),
    map.get("Escrow Fund"),
    map.get("Maintenance Fund"),
    map.get("Highway Use tax - 2290"));