public class LinuxInteractor {
public static String executeCommand(String command)
{
System.out.println("Linux command: " + command);
try
{
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader bf=new BufferedReader(new InputStreamReader(p.getInputStream()));
String str=bf.readLine();
System.out.println("inputStream is::"+str);
while((str=bf.readLine()) != null)
{
System.out.println("input stream is::"+str);
}
System.out.println("process started");
}
catch (Exception e) {
System.out.println("Error occured while executing Linux command. Error Description: "
+ e.getMessage());
e.printStackTrace();
}
}
Когда я запускаю скрипт через консоль, он работает. Но через Java-программу InputStream(Str)
идет как null
.Не удается получить getInputStream из Runtime.getRunTime.exec()
Есть ли какой-либо другой подход, который я могу использовать?
1) Прочитайте (и внесите) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/jw-12-2000/jw-1229-traps. HTML). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и создает' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. 2) Я подозреваю, что вызов 'waitFor' должен быть после потребления потока. –
Это немного бессмысленное ожидание выхода процесса * до того, как вы прочитали какой-либо из своих результатов. Если его выходной буфер заполняется, он никогда не сможет выйти вообще. В вашем коде нет 'InputStream (Str)', но если вы утверждаете, что 'Process.getInputStream()' возвращает null, трудно поверить, что вы правы. – EJP
@EJP InputStream is = Process.getInputStream; , если я прочитал его через buffer-reader.its, поступив как null. его решить сейчас, нужно сделать это в другом потоке. – kin