运行 从 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
考虑以下字符串命令:
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