运行 从 Java (Windows) 安装 Python 的字符串命令

Running String Command to Install Python from Java (Windows)

考虑以下字符串命令:

C:\TS\Veit\Test\python\Python-3.6.9\python.exe -m pip install -r C:\TS\Veit\Test\python\packages\requirements.txt  --find-links --no-index > C:\TS\Veit\Test\python\logs\python.log 2>&1

此命令根据需求文件 requirements.txt 安装 python 及其软件包,然后将命令的输出(stdout 和 stderr)放入名为 python.log 的文件中.

当我从命令行在 Windows 上 运行 此命令时,它运行良好,并且我创建了包含所有日志的 python.log 文件。但是,当我从 java 运行 时,该命令不会创建 python.log 文件。

目前尝试过的两种方式:

1.使用运行时执行:

    Runtime.getRuntime().exec(script_WINDOWS);

script_windows 等于:pythonInterpreter+" -m pip install -r "+requirementsFilePath+" --find-links "+pathToPackages+" --no-index > "+ pythonLogFileLocation +File.separator+"python.log 2>&1" 这与我在上面输入的命令完全相同。

使用这种方法,Runtime 会为我安装 python,但我没有创建 python.log 文件。

2。使用 ProcessBuilder:

    ProcessBuilder builder = new ProcessBuilder(script_WINDOWS);
    builder.redirectErrorStream(true);
    Process p = builder.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while (true) {
        line = r.readLine();
        if (line == null) { break; }
        FileUtils.writeStringToFile(FileUtils.getFile(pythonLogFileLocation+"python.log"), line, "UTF-8");
        FileUtils.writeStringToFile(FileUtils.getFile(pythonLogFileLocation+"python.log"), "\n", "UTF-8");

    }

此方法以以下错误结束:

java.io.IOException: Cannot run program "C:\TS\Veit\Test\python\Python-3.6.9\python.exe -m pip install -r C:\TS\Veit\Test\python\packages\requirements.txt --find-links C:\TS\Veit\Test\python\packages --no-index > C:\TS\Veit\Test\python\logs\python.log 2>&1": CreateProcess error=2, The system cannot find the file specified

由于该命令在命令行中运行完美,我认为这是我尝试从 Java 执行它的方式导致了 python.log 文件未创建的问题。任何帮助将不胜感激。

我怀疑您的问题是 exec 需要生成 cmd.exe 的实例才能使用输出重定向。参见 stackabuse。com/executing-shell-commands-with-java