【发布时间】:2019-06-19 00:14:10
【问题描述】:
正在尝试使用一些自定义数据(-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);
第一次调用失败,要么向我显示用法,要么给出“模式必须是十六进制数字”的错误。它是。第二次调用正常。
这两种方法都应该可以正常工作。
【问题讨论】:
-
@CarlosHeuberger 你是对的,不知道为什么我认为每个开关和相关参数应该放在一起。这解决了问题。知道底层机制如何处理参数中的空格吗?
-
@CarlosHeuberger 这是一部 Android 手机 (9.0)