无法从 Java Process(Runtime.getRuntime().exec() 或 ProcessBuilder)读取 InputStream
2022-09-01 14:28:21
我正在尝试使用Java在外部启动一个进程,并且无法从其InputStream中读取任何内容。
如果我使用“ls”,“ps”或“kill”等命令启动进程,一切正常。我可以启动该过程并获取有关输入流或过程的错误流的信息。
如果我尝试使用像“ftp”或“telnet”这样的命令,InputStream和ErrorStream在尝试读取时都会阻止我的程序。任何时候都不会通过这些流传递任何信息。
任何人都可以解释这种行为吗?这些命令是不可能实现的,还是我的实现有问题?
String processName = _configuration.getProgramCommand().getCommand();
ProcessBuilder procBuilder = new ProcessBuilder(processName);
System.out.println("Starting process "+processName);
_proc = Runtime.getRuntime().exec(processName);// procBuilder.start();
if(!procBuilder.redirectErrorStream()) {
_errorWorker = new ProcessErrorWorker(_proc);
_errorWorker.start();
}
String proc_start_answer = _configuration.getNextCommand().getCommand();
System.out.println("Waiting for process answer '"+proc_start_answer+"'");
BufferedReader input = new BufferedReader(new InputStreamReader(_proc.getInputStream()));
String answer = "";
try {
System.out.println("inputstream ready: "+input.ready());
answer+=input.readLine();
System.out.println("process answer: "+answer);
input.close();
} catch(Exception e) {
System.out.print(e.getMessage());
}