java - getRuntime().exec(String[]) 函数的行为与 getRuntime().exec(String) (Android) 不同
问题描述
试图用一些自定义数据(-p
标志)调用 ping。由于我需要传递参数,因此使用exec()
接受字符串数组的重载似乎很直观。它一直失败,所以我尝试了与一个长字符串相同的精确输入,现在一切都很好。我不知道问题是什么,我已经多次检查了输入。
尝试在字符串数组中弄乱额外的空格,以排除参数之间缺少空格的任何问题。
String sPattern = StringUtils.bytesToHex(sData.getBytes());
sPattern = padHexString(sPattern);
sPattern = "-p " + sPattern.toLowerCase(); // "-p 3132372e302e302e31ffffffffffffff"
// this FAILS
Runtime.getRuntime().exec(new String[]{"/system/bin/ping",
"-c 1",
"-s 64",
sPattern,
sReportServer});
// this WORKS
Runtime.getRuntime().exec("/system/bin/ping -c 1 -s 64 " +
sPattern + " " + sReportServer);
第一次调用失败,要么向我显示用法,要么给出“模式必须是十六进制数字”的错误。它是。第二个电话工作正常。
两种方法都应该可以正常工作。
解决方案
正如 Carlos Heuberger 指出的那样,我在一些参数中有空格,这导致调用失败。我的想法是将开关和相关参数配对在同一个字符串中,但这会导致它被双引号括起来。
希望这可以为做同样事情的人节省一些时间:|
推荐阅读
- python - 循环遍历列表中的类初始化
- .net - bash:ApiPort.exe:找不到命令
- ansible - 摆脱 Ansible Jinja2 if 语句中的尾随 \n
- jmeter - Jmeter - ISO8583 消息生成无效位图
- sql - sql:至少计算一个
- java - 我在尝试使用 excel 数据时收到 java.lang.ExceptionInInitializerError?
- c# - AutoMapper - 不使用映射配置文件的相同类型的映射集合
- pandas - 使用来自其他列的行的信息创建新列
- node.js - Nodejs - 删除重复项,对 AZ 进行排序
- sql - 雪花无法插入多行使用插入具有 md5 字段