Здравствуйте. Мне необходимо прочитать данные из stdout для процесса, в котором выполняется следующий
python-код
from jupyter_client import MultiKernelManager
mngr = MultiKernelManager()
remote_id = mngr.start_kernel("python3")
print(remote_id)
В Java я обрабатываю этот процесс следующим образом:
Метод запускающий процесс
private Process startProcess(String command) throws Exception {
Process process = Runtime.getRuntime().exec(command);
return process;
}
Метод читающий данные из потоков
/** Reads the output stream from the process */
private String readStream(InputStream stream) throws Exception {
InputStreamReader inputStreamReader = new InputStreamReader(stream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
StringBuilder response = new StringBuilder();
String[] splitArray;
String msg;
while ((msg = bufferedReader.readLine()) != null) {
logger.debug(msg);
stringBuilder.append(msg).append("\n");
}
logger.debug("Stream was read");
String control = stringBuilder.toString();
splitArray = control.split("\n");
for (String s : splitArray) {
response.append(s).append("\n");
}
bufferedReader.close();
inputStreamReader.close();
String output = response.toString();
output = (output == null || output.length() == 0) ? "" : (output.substring(0, output.length() - 1));
return output;
}
Из процесса извлекаются объекты потоков и передаются в метод для чтения
spoiler
Process process = startProcess(command);
String output = readStream(process.getInputStream());
Однако я обнаружил, что в этом
местеwhile ((msg = bufferedReader.readLine()) != null) {
logger.debug(msg);
stringBuilder.append(msg).append("\n");
}
выполнение прерывается
При этом, по идее, выполнение самого процесса заканчивается, и все данные из python-программы возвращаются.
В чем может быть проблема? Как мне до конца дочитать данные?