【问题标题】:executing shell commands programmatically in Android在 Android 中以编程方式执行 shell 命令
【发布时间】:2013-01-26 20:12:29
【问题描述】:

我有两个命令要执行并取回数据 我的 .sh 文件作为两个命令,看起来像这样

苏 dhcpcd eth0

当我尝试在我的 Android 终端中通过键入 as 来执行 .sh 命令时 sh 文件名.sh 它没有给我输出 但是当我通过键入单独的行来执行它时,它可以工作。所以当我编程为

nativeProcess = Runtime.getRuntime().exec("su");
nativeProcess = Runtime.getRuntime().exec("dhcpcd eth0");
while ((line = br.readLine()) != null) 
{
    contents.append(line + "\n");
}

这有什么问题?我得到的输出内容为 null

【问题讨论】:

标签: android shell process


【解决方案1】:

我们可以像这样使用 Runtime 类来执行 shell 命令。

Runtime.getRuntime().exec("ls");

上面的代码将为给定的命令 ls 创建一个本地进程,将返回与 Process 对象相同的进程。

更多详情Check here

【讨论】:

  • 这对已经存在的问题没有任何帮助,并且完全忽略了问题。
【解决方案2】:

exec 在 Java 中启动一个新进程。所以第一行创建了一个新的su 进程,它将简单地坐在那里等待您的输入。第二行启动一个新的dhcpcd 进程,该进程没有特权,因此不会产生有用的输出。

您想要的是使用su 运行dhcpcd,通常是这样的:

exec("su -c dhcpcd eth0")

【讨论】:

  • 当我在终端输入时它可以工作并且我可以看到结果。 nativeProcess = Runtime.getRuntime().exec("su -c dhcpcd eth0"); InputStream = nativeProcess.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); StringBuilder 内容 = new StringBuilder(); while ((line = br.readLine()) != null) { contents.append(line + "\n"); } 我仍然得到 null
  • @nneoneo- 实际上问题是当我执行该命令时,我得到的输出是“fork to background, child pid type”的形式。你知道吗,我认为它在后台运行并连接到子进程。所以要捕捉命令“su -c dhcpcd eth0”的响应,应该有另一种方法。如果您知道,请分享您的信息
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2011-03-21
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多