【问题标题】:How to get Exec Output in Kotlin?如何在 Kotlin 中获取执行输出?
【发布时间】:2021-02-06 17:26:58
【问题描述】:

我一直在努力解决这个问题,但没有成功。 我正在执行一个命令来获取 ping 结果,然后将其存储在一个变量中,但是当我在 TOAST 中显示该变量时,它总是显示“NULL”。

这是我的代码:

fun pingthis(): String? {
    try
    {
        //execute the command
        val pingprocess: Process = Runtime.getRuntime().exec("/system/bin/ping -c 1 -s 64 $host")
        pingprocess.waitFor()
        val bufferedReader = BufferedReader(InputStreamReader(pingprocess.inputStream))

        //read the result
        val logger: StringBuilder = StringBuilder()
        var line: String? = ""
        while (line != null) {
            line = bufferedReader.readLine()
            logger.append(line + "\n")
        }

        pingResult = logger.toString()

    } catch (e: IOException) {}
 return pingResult 
 }

如您所见,“pingResult”总是返回 NULL。我不知道为什么。我做错了什么?

【问题讨论】:

  • 您执行一个进程,等待它完成然后尝试读取它的输出 - 但该进程已经终止,所以您什么也得不到……stackoverflow.com/a/26127342/829571
  • 我已经删除了 waitFor 表达式。我仍然从 BufferedReader 获得空值。如何准确读取命令 exec 的输出?我一无所知。

标签: android kotlin


【解决方案1】:

我自己可能应该猜到这一点,但我一点也不专注,哈哈;我花了三天时间才知道我在没有互联网权限的情况下对我的应用进行 ping。如果你问我,那是非常愚蠢的。

上面的代码非常适合执行 ping 命令和解析输出,但我总是得到 null,因为如果我没有 Internet 权限,ping 命令甚至都不会运行。

我在我的 Android Manifest 中添加了网络权限,它运行良好。

还要感谢上面 assylias 的评论。您不应该执行“process.waitFor()”然后读取输出,因为该进程已经终止。

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2010-11-11
    • 2018-04-23
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多