Почему моя программа Java не может считать STDERR Perl?

Значение интерпретируется как число. Вы можете сравнить параметры времени в атрибуте disabled с помощью строки:

<mat-option [disabled]="time2.toString() === timeSelection1.toString()" *ngFor="
  let time2 of resTimePeriodData
 " [value]="time2">{{ time2 }}</mat-option>

Я бы порекомендовал использовать только цифры.

5
задан brian d foy 10 December 2008 в 15:09
поделиться

5 ответов

getErrorStream не читает поток сообщений об ошибках, он просто получает дескриптор к нему. Поскольку это - канал при никогда фактическом чтении его это заполнится и вынудит программу Perl заблокироваться.

Вам нужно что-то как:

Inputstream errors = getErrorStream();
while (errors.read(buffer) > 0) {
    SOP buffer;
}
7
ответ дан 18 December 2019 в 08:32
поделиться

Идеально, я думаю, что для предотвращения мертвой блокировки в Java необходимо породить отдельные потоки для чтения STDERR и STDOUT. Это кажется, что Perl блокируется при записи в STDERR, потому что по той или иной причине Вы никогда не читаете из него в Java.

4
ответ дан 18 December 2019 в 08:32
поделиться

Дополнительным фактором для рассмотрения является буферизация, которая происходит при переданных по каналу процессах.

Существует по умолчанию, о буфере с 30 выходами строки, который сохраняется оболочкой, создающей межпроцессный канал, поэтому если приложение Perl не создало достаточно данных, это не будет отправлено в JAVA-приложение все же для обработки.

4
ответ дан 18 December 2019 в 08:32
поделиться

Может быть этот поток, имеет возможную причину для Вашей проблемы:

Добавьте 3 строки к верхней части сценария Perl:

use IO::Handle;
STDOUT->autoflush(1);
STDERR->autoflush(1);

Проблема в упомянутом потоке была связана со "способом, которым Perl буферизует свой вывод".

Однако здесь, Adrian Pronk упоминает в комментариях, что "Perl зависает, потому что Java никогда не читает свой вывод".

4
ответ дан 18 December 2019 в 08:32
поделиться
STDOUT->autoflush(1);
STDERR->autoflush(1);

This is the information I needed! I have a Java app running some Perl scripts and I'd only get the output after it was finished. By adding the autoflush(1) I get it right away.

BTW, I do have separate threads for reading STDERR and STDOUT, and that's the way to go.

Thanks.

0
ответ дан 18 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: