2013-02-11 180 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