在项目目录中使用 ProcessBuilder 时权限被拒绝

问题描述 投票:0回答:1

我正在尝试使用 ProcessBuilder 在我的 Java 程序中执行 python 文件,但是在使用 ProcessBuilder 时出现错误 13:权限被拒绝。

try{
    ProcessBuilder pb = new ProcessBuilder(".");
    pb.command(System. getProperty("user.dir"), "python3 scraper.py");
    System.out.println("cd = "+pb.directory());
    Process process = pb.start();


}catch (Exception e){
    e.printStackTrace();
}

结果输出:


cd = null
java.io.IOException: Cannot run program "/Users/user_name/IdeaProjects/project_name": error=13, Permission denied
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
    at Main.main(Main.java:896)
Caused by: java.io.IOException: error=13, Permission denied
    at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
    at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:314)
    at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:244)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
    ... 2 more

我试过手动更改我的项目权限(我在 macOs 上)。不确定我需要做什么来解决这个问题。我相信错误不是运行 python 代码,而是实际运行 shell 命令本身。在必要的目录中手动执行 python 代码时,它运行良好,只有一次我尝试在我的 Java 代码中使用 ProcessBuilder。因此,如果我将“python3 scraper.py”更改为“ls”或“echo hello”或其他任何内容,则会发生完全相同的事情

java permissions processbuilder
1个回答
0
投票

MacOS 因权限不足而阻止 Java 程序执行 python 文件。要解决此问题,您可能需要授予 python 文件的可执行权限。你还需要用这样的东西来创建过程

  ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "python3 --version");

并验证 python 版本是否已打印

添加权限到你的脚本在 python 脚本上运行这个

chmod +x scraper.py

通过运行以下命令验证文件现在是否具有可执行权限:

ls -l scraper.py

输出应该在第一列显示

"-rwxr-xr-x"
,表示拥有者、组和其他人有可执行权限。

© www.soinside.com 2019 - 2024. All rights reserved.