Runtime.getRuntimeexec无法与gcloud一起使用

问题描述

我试图描述最后执行的数据流作业,以检查特定的数据流作业是否正在运行,停止,失败或正在使用Java执行。

我正在尝试使用Runtime.getRuntime().exec(command)

执行gcloud命令
String command ="gcloud dataflow jobs describe $(gcloud dataflow jobs list --sort-by=CREATION_TIME --limit=1 --format=\"get(id)\") --format=json";
Runtime runTime = Runtime.getRuntime();
Process process = runTime.exec(command);
BufferedReader is = new BufferedReader(new
InputStreamReader(process.getInputStream()));

当我执行此代码时,出现错误消息:

Exception in thread "main" java.io.IOException: Cannot run program "gcloud": CreateProcess error=2,The system cannot find the file specified

有人可以在这里帮助我解决此错误吗?

解决方法

ProcessProcessBuilder类启动进程。

它不运行bash shell命令,但这就是您键入的内容。你不能运行这个。

您可以尝试做的是启动bash,并将其作为执行bash的命令传递。不要使用runtime.exec,不要使用ProcessBuilder,不要将命令作为单个字符串传递,而将每个参数作为单独的字符串传递。试试:

List.of("/bin/bash","-c","gcloud... all that mess");作为命令。

我什至不确定$(东西是bash还是zsh或fish或其他东西,请确保您启动正确的shell。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...