2013-02-11 160 views
3

我有两个命令来执行,并取回数据 我.SH文件作为两个命令,它看起来像这样执行shell命令编程android系统

苏 的dhcpcd eth0的,当我尝试执行

在我的android终端中的.sh命令通过键入为 sh filename.sh 它不会给我输出 ,但是当我通过输入个人行来执行它时,它的工作原理。所以当我编程为

nativeProcess = Runtime.getRuntime().exec("su"); 
nativeProcess = Runtime.getRuntime().exec("dhcpcd eth0"); 
while ((line = br.readLine()) != null) 
{ 

contents.append(line + "\n"); 

      } 

这是什么问题?我得到的输出内容为空

+0

检查了这一点http://tech-papers.org/executing-shell-command-android-application/ – 2015-01-11 10:24:51

回答

3

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

你想要的是使用dhcpcdsu,通常像这样运行:

exec("su -c dhcpcd eth0") 
+0

谢谢你..它的工作 – user1810931 2013-02-11 17:59:36

+0

当我键入它的工作原理终端,我可以看到结果。 nativeProcess = Runtime.getRuntime()。exec(“su -c dhcpcd eth0”); InputStream is = nativeProcess.getInputStream(); InputStreamReader isr = new InputStreamReader(is); \t \t \t BufferedReader br = new BufferedReader(isr); StringBuilder contents = new StringBuilder(); \t \t \t \t \t \t 而(!(线= br.readLine())= NULL){ contents.append(线+ “\ n”); \t \t \t}我仍然得到空 – user1810931 2013-02-11 19:20:12

+0

@ nneoneo-实际上问题是当我执行那个命令时,我得到的输出是“fork to background,child pid type”的形式。您是否了解这一点,我认为它是在后台运行并与儿童流程相关联。为了捕捉命令“su -c dhcpcd eth0”的响应,应该有另一种方式。如果你知道它,请分享你的信息 – user1810931 2013-02-11 21:46:41

4

我们可以通过Runtime类这样执行shell命令对应。

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

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

有关它的详细信息Check here

+0

这并没有增加问题中已经存在的内容,完全没有解决问题。 – 2013-02-11 17:12:09