如何在java中执行sudo命令并得到错误输出?

anauzrmj  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(371)

这个问题在这里已经有答案了

如何在java中用sudo权限执行bash命令(6个答案)
两年前关门了。
所以我一直在尝试通过java在我的raspberry pi上执行sudo命令:

try {
        Process p;
        p = Runtime.getRuntime().exec(`command`);
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String output = "";
        while ((output = reader.readLine()) != null) {
            System.out.println(output);
        }
        reader.close();

        p.waitFor();

    } catch (IOException | InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } finally {
        System.out.println("Process finished");
    }

这适用于以下命令 sudo ping google.com 或者 sudo -V . 我得到了正确的输出。
但我的树莓圆周率,我实际上想通过一个433mhz的发送器发送信号。而需要的命令 sudo ~pi/raspberry-remote/send 11111 3 1 当“手动”执行时,工作完全正常,当通过java执行时,完全相同的代码似乎不工作。
手动执行时,我得到两行输出。如果命令有问题,我会得到一个错误输出。但是当通过java执行时,我没有得到任何输出。甚至连一条错误的信息都没有。甚至像这样的命令 sudo hey123xy ,这显然是不存在的,不要给我任何java输出,尽管控制台说,这个命令不存在。
有没有办法读取控制台的错误输出(可能有助于调试)
如何在java中运行sudo命令?
提前谢谢
编辑:我正在寻找一种“安全”的方法。类似的问题也有答案,答案的作者表示,他/她不建议在答案中使用代码。
编辑2:经过几次混乱@迈赫迪是对的。他/她给出的答案帮助我解决了问题@安德烈亚斯发布了一个非常有用的答案,所以我会把这个标记为正确的答案。。。

hs1rzwqc

hs1rzwqc1#

有没有办法读取错误输出
是的,打电话 p.getErrorStream() .
更好的是,使用 ProcessBuilder 打电话给我 redirectErrorStream(true) ,因此从 getInputStream() 数据。

相关问题