Java Runtime.getRuntime().exec无法在命令中使用双引号



以下命令在我的终端中运行良好:

gcloud日志读取"logName=projects/logs/java.log AND labels.component=projet1 AND textPayload="End: of query."

但通过Runtime.getRuntime().exec 执行时返回空inputstream

Runtime rt = Runtime.getRuntime();
Process process = rt.exec(new String[]{"gcloud", "logging" ,"read" ,"logName=projects/logs/java.log AND labels.component=project1 AND textPayload="End: of query.""});
BufferedReader is = new BufferedReader(new 
InputStreamReader(process.getInputStream()));

更新:我尝试过使用processBuilder,我的命令参数看起来像:

命令为:[gcloud,logging,read,'logName=projects/logs/java.log AND labels.component=project1 AND textPayload="End:of query."AND timestamp>"2018-11-15T15:12:11Z"']

但我在执行时遇到以下错误:

错误:(gcloud.logging.read(INVALID_ARGUMENT:无法解析的筛选器:第1行第147列,标记"2018-11-15T15:12:11Z"处出现语法错误

您需要一个双转义,在Java中,当我们调用另一个需要转义的东西(regex或其他什么(时,这很常见

试试这个(我只是用\\替换了\"(

Runtime rt = Runtime.getRuntime();
Process process = rt.exec(new String[]{"gcloud", "logging" ,"read"  
,"logName=projects/logs/java.log AND labels.component=project1 AND textPayload=\"End: of query.\""});
BufferedReader is = new BufferedReader(new 
InputStreamReader(process.getInputStream()));
  • \:逃到\

  • \":逃到">

  • 所以\\"将在runtime.exec中转义为\">

最新更新