java - 如何通过java程序运行brew命令?
问题描述
所以我刚刚使用自制软件安装了“亮度”实用程序包(它基本上是一种通过终端调整屏幕亮度的方法),但我很难在 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 的权限,它会起作用。但这太冒险了,有没有其他办法呢?
解决方案
您的方法中的问题是您没有专门通过 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 的更多示例,请参阅此主题
推荐阅读
- angular - ng serve 不提供图像,但 npm start 工作正常
- angular - 如何配置我的 Angular 6 环境,以便能够在 Angular 6 中为 jQuery 使用 Kendo UI 网格?
- reactjs - 反应元素内的转义变量
- python - Django:创建一个带有间隙的文本以供输入
- docker - 多个微服务共享同一个数据库服务器(一个容器,多个数据库)
- sql - 是否可以在同一个查询中使用按“不同计数”分组的结果?
- python-3.x - 使用 Python (py-solc) 运行 Solidity 时出错
- asp.net - HttpContext.Current.User.Identity 突然停止在 Visual Studio 2017 中工作
- java - 如何在 Hibernate 的复合主键中自动增加 Id?
- mongodb - $nin 与 $expr