所以我刚刚使用自制软件安装了“亮度”实用程序包(它基本上是一种通过终端调整屏幕亮度的方法),但是我很难在Java中运行以下代码:
Process p = Runtime.getRuntime().exec("brightness -l");
当我通过终端运行“ brightness -l”时,它将给出当前屏幕的亮度级别。但是,当我尝试通过Java行时,会引发此错误:
线程“主”中的异常java.io.IOException:无法运行程序 “ brew”:错误= 2,没有这样的文件或目录
我尝试了以下操作:
Process p = Runtime.getRuntime().exec("/usr/local/bin/ brightness -l");
但是它给了我一个权限被拒绝的错误:
线程“主”中的异常java.io.IOException:无法运行程序 “ / usr / local / bin /”:错误= 13,权限被拒绝
因此,我想,如果我向普通用户授予访问bin的权限,它就会起作用。但这太冒险了,还有其他方法可以做到吗?
答案 0 :(得分:1)
方法中的问题是您没有通过bash专门运行命令。 所以我的解决方案就像
Runtime.getRuntime().exec("/bin/bash -c brightness -l");
此外,建议改用ProcessBuilder,因为现在不鼓励使用Runtime.exec()look the documentation
所以我的最终解决方案是:
String[] args = new String[] {"/bin/bash", "-c", "brightness" ,"-l"};
Process proc = new ProcessBuilder(args).start();
有关ProcessBuilder see this topic
的更多示例答案 1 :(得分:0)
最适合我的语法是:
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'是函数'brightness'的标志。该命令只是将“亮度-l”的输出倒入文本文件“ FileName”中。
在“进程po”中,我们在第一个参数中指定文件的类型,在这种情况下,对于 shell脚本,该文件的类型为“ sh”,而-c则指定该文件的“ / usr / local / Cellar” /brightness/1.2/bin/brightness -l'将作为字符串处理(因为路径表达式是任意的)