【问题标题】:getRuntime().exec(String[]) function behaves differently to getRuntime().exec(String) (Android)getRuntime().exec(String[]) 函数的行为不同于 getRuntime().exec(String) (Android)
【发布时间】: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)

标签: java android exec


【解决方案1】:

正如 Carlos Heuberger 指出的那样,我在一些参数中包含空格,这导致调用失败。我的想法是将开关和相关参数配对在同一个字符串中,但这会导致它被双引号括起来。

希望这可以为做同样事情的人节省一些时间:|

【讨论】:

    猜你喜欢
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多