java - Java Runtime.getRuntime().exec 不能在命令中使用双引号
问题描述
以下命令在我的终端中运行良好:
gcloud
日志读取"logName=projects/logs/java.log AND labels.component=projet1 AND textPayload=\"End: of query.\"
inputstream
但是在执行时返回 nullRuntime.getRuntime().exec
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 时间戳>"2018-11-15T15:12:11Z"']
但我在执行时收到以下错误:
错误:(gcloud.logging.read)INVALID_ARGUMENT:无法解析的过滤器:第 1 行第 147 列的语法错误,标记“2018-11-15T15:12:11Z”
解决方案
你需要一个双 \ 转义,当我们调用另一个需要转义的东西(正则表达式或其他)时,这在 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()));
\ : 转义到 \
\" : 转义到 "
- 所以 \\" 将在 runtime.exec 中转义为 \"
推荐阅读
- python - 在熊猫数据框中创建父子对字典
- batch-file - 使用通配符文件夹批量复制某些文件
- php - 在 jQuery 中使用 post() 生成元素后对元素进行操作
- getuikit - 如何更改 UIkit.notification 的宽度?
- c# - 反转显示字符串的顺序
- wordpress - wp_options 中的 Wordpress cron 值太大
- java - 为什么 Java Web 应用程序是使用 Java SE SDK 开发的
- c# - 如何使用另一种形式的方法?
- semantic-ui - 语义 UI 下拉菜单显示为空
- postgresql - 我无法恢复 pg_dump 备份