| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > Получить вывод программы без буферизации |
| Автор: octave 4.9.2006, 01:22 | ||
нужно запустить утилиту и получать ее вывод в реальном времени, без буферизации. Фунцией sysopen неудается запускать программы, хотя это вроде как аналог open, только без буферизации.
по коду возможно понятнее, чего я хочу добиться... |
| Автор: Nab 4.9.2006, 07:49 |
| Если что меня поправят, но думаю Вы все верно предполагали, но не угадали с местом Попробуйте вместо read вызвать sysread. И второе, зачастую терминальная программа буферизирует свой вывод, то есть отдает тоже готовые строки, а не посимвольно... Хотя думаю это может все зависеть еще и от режима, попробуйте binmode включить.... |
| Автор: sharq 4.9.2006, 11:06 | ||
| octave, используй обычный open и <>, а если хочешь читать блочно, то используй local $/ = \$length; Подробно смотри perldoc -f open.
|
| Автор: Nab 4.9.2006, 11:39 |
| sharq, плиз поясни подробней про $/. Насколько я знаю, это разделитель входных строк. А не размер буфера. |
| Автор: amg 4.9.2006, 12:25 | ||
А я так и не понял, чего еще нужно добиться. Вроде, в приведенном коде $| вполне успешно включает/выключает буферизацию... Или я не о том? |
| Автор: sharq 4.9.2006, 14:48 |
| Nab, perldoc -f open perldoc perlvar $/ для Perl версии 5.8.0 и выше. |
| Автор: octave 5.9.2006, 06:16 |
| Да, проблема была в буферизованном выводе утилиты. В заблуждение меня ввело то, что когда программа работала с терминалом, она выдавала небуферизованный вывод, а когда с пайпом нет (только узнал). Поэтому я думал, что буферизация не используется в ней. Всем спасибо ) |