我的应用程序的资源目录中有一个文件pythonScript.py
。构建jar后,文件位于target\MyApp\BOOT-INF\classes
现在,当我直接调用此文件pythonScript.py
时,我收到以下错误:
file - python.py does not exists
这就是我调用python文件的方式:
Java代码
private static final String imageRemoverScript = "removeImages.py";
String[] cmd = { "python", imageRemoverScript, File.getAbsolutePath(),
basePath.concat(fileName.concat(new String("" + fileCount))) };
ScriptCallerUtility.pythonScript(cmd);
答案 0 :(得分:0)
如果Python文件位于resources文件夹中并且您有maven项目,那么您将python文件包含在jar文件中。
所以你实际上可以做的是创建一个Java可执行类,它从类路径中提取Python文件,并将Python文件复制到一个临时文件中。然后执行临时文件,然后删除它。
以下是实现上述操作的示例:
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Scanner;
public class PythonRunner {
public static void main(String[] args) throws IOException {
Path temp = Files.createTempFile("py", ".py"); // Create temporary file with prefix, suffix
try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sample.py")) {
Files.copy(in, temp, StandardCopyOption.REPLACE_EXISTING); // Copy to temporary file.
// Execute the file and do whatever your need
Process process = new ProcessBuilder(
"C:\\Users\\BLAH\\python.exe", temp.toString()).start();
try(Scanner scanner = new Scanner(process.getInputStream())) {
scanner.useDelimiter("\\Z");
System.out.println(scanner.next());
}
Files.deleteIfExists(temp); // Delete the temporary file.
}
}
}
然后你可以使用生成的jar文件使用类似于此命令的命令运行它:
java -cp project.example-1.0-SNAPSHOT.jar com.fernandes.python.run.PythonRunner
如果sample.py
包含:
print ("hi")
您将看到此控制台:
hi