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

Java Runtime.getRuntime().exec无法在命令中使用双引号,java,gcloud,runtime.exec,google-cloud-dataproc,Java,Gcloud,Runtime.exec,Google Cloud Dataproc,以下命令在我的终端中运行良好: gcloudlogging read“logName=projects/logs/java.log和labels.component=projet1和textPayload=\”结束:查询。\” 但通过Runtime.getRuntime().exec执行时返回nullinputstream Runtime rt = Runtime.getRuntime(); Process process = rt.exec(new String[]{"gcloud", "lo

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

gcloud
logging read
“logName=projects/logs/java.log和labels.component=projet1和textPayload=\”结束:查询。\”

但通过
Runtime.getRuntime().exec执行时返回null
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和labels.component=project1和textPayload=“End:of query.”和timestamp>“2018-11-15T15:12:11Z”]

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


错误:(gcloud.logging.read)无效的_参数:不可解析筛选器:标记“2018-11-15T15:12:11Z”第1行第147列的语法错误。

您需要双转义,在Java中调用另一个需要转义的东西(regex或其他任何东西)时,这是很常见的

试试这个(我只将\“替换为\\”)

  • \:逃到\

  • \“:逃到”

  • 因此\“将在runtime.exec中转义为\”

您是否尝试过使用?process.getInputStream()或从输入流读取时的行究竟是空的?您是否也尝试过process.getErrorStream()?@deaar是的,也尝试过processBuilder。但是从inputstream转换为字符串时出现gettig异常错误:(gcloud.logging.read)无效的_参数:不可解析筛选器:第1行,第108列,标记“:”;第1行,第164列,标记“:”的语法错误。如果冒号不可解析,则应检查是否可以使用其他文本负载。冒号不可转义…请尝试一些字符集代码,而不是直接使用冒号。我的错,我已经使用了\\escape but这似乎不起作用。也尝试了processBuilder,但在将inputSTream转换为字符串时出现以下异常。错误:(gcloud.logging.read)无效\u参数:不可解析筛选器:第1行第108列的语法错误,标记“:”;第1行第164列的语法错误,标记“:”整个“logName=…\”结束:查询。\”“是在gcloud中引用的,所以它需要另一层Java引用,对吗?
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()));