java - 如何在 Java 中将脚本作为文件运行?

标签 java python maven

我有一个 Python 脚本,它是我项目中的资源。与脚本一起的是一个 XML 文件,脚本需要使用该文件才能正确运行。我将这两个文件作为输入流读取,然后为这两个文件创建临时文件:

InputStream is = (this.getClass().getClassLoader().getResourceAsStream("InterWebApp.py"));
File script = File.createTempFile("script", ".py");
Files.copy(is, script.toPath(), StandardCopyOption.REPLACE_EXISTING);
InputStream is1 = (this.getClass().getClassLoader().getResourceAsStream("setup.xml"));
File xml  = File.createTempFile("config", ".xml");
Files.copy(is1, xml.toPath(), StandardCopyOption.REPLACE_EXISTING);

但是,我不确定如何将脚本作为进程启动:

Process p = Runtime.getRuntime().exec("." + script.getAbsolutePath());
p.waitFor();

上面的代码抛出一个 IOException。如何运行 script.py 并确保它可以访问 config.xml?现在,Python 脚本仅使用绝对路径解析 XML 文件,但该路径对于临时文件来说并不相同。

最佳答案

基本上,您是在自找麻烦,因为您要求它提供绝对路径,但随后在其前面加上“.”前缀,这通常是一个相对路径修饰符。首先尝试 .exec(script.getAbsolutePath()) 。此外,根据您的操作系统和/或配置,.py 文件可能会或可能不会被识别为可执行文件(例如,在 Unix 系统上,只有带有可执行标志的文件才会被识别为可执行文件)。您实际上可能想要查找 Python 可执行文件的位置并将脚本作为参数传递。

关于java - 如何在 Java 中将脚本作为文件运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38660690/

相关文章:

python - 根据数组的另一列聚合一列中的最小最大值 - Python

java - Intellij 严重 tomcat 错误 : failing to start component

java - 如何通过 Maven 将 Google 的 OAuth 客户端导入 IntelliJ?

java - 使用迭代器的 ArrayList 的不同值的 ArrayList

java aes 256 java.security.InvalidKeyException : Illegal key size after installation the policy

java - 使用数组作为 hashmap java 的键

Python 将二进制数据写入 MIME 信息集

python - 设置普通 Graphite 烯嵌套查询

java - 在 mvn clean package 期间仅构建一次 WAR

java - 足够堆栈溢出吗?