如何通过java程序运行brew命令



所以我刚刚用自制软件安装了"亮度"实用程序包(这基本上是一种通过终端调整屏幕亮度的方法(,但我很难在java:中运行这段代码

Process p = Runtime.getRuntime().exec("brightness -l");

当我通过终端运行"亮度-l"时,它会给出当前屏幕的亮度水平。但当我尝试通过java执行该行时,它会抛出以下错误:

线程"main"java.io.IOException:无法运行程序"brew":错误=2,没有这样的文件或目录

我尝试过以下操作:

Process p = Runtime.getRuntime().exec("/usr/local/bin/ brightness -l");

但它给了我一个拒绝许可的错误:

线程"main"java.io.IOException:无法运行程序"/usr/local/bin/":error=13,权限被拒绝

所以我想如果我授予普通用户访问bin的权限,它会起作用。但这太冒险了,有其他办法吗?

方法中的问题是您没有完全通过bash运行命令。所以我的解决方案应该是类似的

Runtime.getRuntime().exec("/bin/bash -c brightness -l");

此外,建议使用ProcessBuilder,因为现在不鼓励使用Runtime.exec((查看文档

所以我的最终解决方案是:

String[] args = new String[] {"/bin/bash", "-c", "brightness" ,"-l"};
Process proc = new ProcessBuilder(args).start();

有关ProcessBuilder的更多示例,请参阅本主题

对我有效的语法是:

String command = "echo $(/usr/local/Cellar/brightness/1.2/bin/brightness -l) >    /Users/nizhabib/Desktop/FileName";
Process po = new ProcessBuilder("/bin/sh", "-c", command).start();

其中"command"变量包含包含可执行文件"brightness"的目录,"-l"是函数"brightity"的标志。该命令只是将"brightness-l"的输出倒入文本文件"FileName"中。

在"process po"中,我们在第一个参数中指定文件的类型,在本例中,它是shell脚本的"sh",并且-c指定"/usr/local/Cellar/bbrighty/1.2/bin/brightness-l"将作为字符串处理(因为路径表达式是任意的(

相关内容

  • 没有找到相关文章

最新更新