Как я могу получить вывод подпроцесса в Java - PullRequest
2 голосов
/ 15 февраля 2012

возможно, у него есть связь с android, но не так много IMO.

    package com.main.app;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.widget.TextView;

public class RootPermissionActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            Process p = Runtime.getRuntime().exec("su");
            DataOutputStream outputStream = new DataOutputStream(p.getOutputStream());
            outputStream.writeBytes("touchasd /m\n");

                       //codes below used to get the error output, but get nothing.
            TextView suCommandMessage = (TextView)findViewById(R.id.suCommandMessage);
            BufferedReader d = new BufferedReader(new InputStreamReader(p.getErrorStream()));
              String msg;
              while((msg = d.readLine()) != null) {
                  suCommandMessage.setText(msg);
              }

            outputStream.writeBytes("exit \n");
            p.waitFor();
        } catch(IOException e) {
            new AlertDialog.Builder(this)
                           .setTitle("Exception")
                           .setMessage("IOException: " + e)
                           .setPositiveButton("OK", null)
                           .show();
        } catch(InterruptedException e) {
            new AlertDialog.Builder(this)
               .setTitle("Exception")
               .setMessage("InterruptedException: " + e)
               .setPositiveButton("OK", null)
               .show();
        }
    }
}

сначала я создаю новый процесс su, чтобы получить разрешение root, это просто подпроцесс для запуска команды оболочки, затем я пишу некоторые коды в подпроцесс, все в порядке. затем я хочу получить сообщение об ошибке подпроцесса, поэтому я пишу неправильную команду touchasd /m\n, но я не знаю, как получить сообщение об ошибке подпроцесса, кто-нибудь может мне помочь? Спасибо. :)

1 Ответ

0 голосов
/ 15 февраля 2012

Сделайте что-то вроде следующего, чтобы получить поток ошибок процесса.

BufferedReader stdErr = new BufferedReader(new InputStreamReader(p.getErrorStream()));

Я не видел комментарии в вашем блоке кода, кажется, что вышеуказанная строка и связанные с ней вещи закомментированы в вашем кодеблок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...