Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить вывод программы без буферизации 
V
    Опции темы
octave
Дата 4.9.2006, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.9.2006

Репутация: нет
Всего: нет



нужно запустить утилиту и получать ее вывод в реальном времени, без буферизации. Фунцией sysopen неудается запускать программы, хотя это вроде как аналог open, только без буферизации. 


Код

$|=1;

my $out_tty;
my $n_byte=100;

open(TTY,"mytty.exe -td -b|");
for my $iUP(1..10)
    {
    read TTY,$out_tty,$n_byte;
    print $out_tty;
    sleep 1;
    }

по коду возможно понятнее, чего я хочу добиться...
PM MAIL   Вверх
Nab
Дата 4.9.2006, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 3
Всего: 37



Если что меня поправят, но думаю Вы все верно предполагали, но не угадали с местом smile

Попробуйте вместо read вызвать sysread.

И второе, зачастую терминальная программа буферизирует свой вывод, то есть отдает тоже готовые строки, а не посимвольно... Хотя думаю это может все зависеть еще и от режима, попробуйте binmode включить....


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
sharq
Дата 4.9.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



octave, используй обычный open и <>, а если хочешь читать блочно, то используй local $/ = \$length;
Подробно смотри perldoc -f open.

Код

local $/ = \1; # размер буффера
open my $fh, '-|', "mytty -td -b" or die "$!";
while (<$fh>) {
  # do smth with $_
}


 smile 


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Nab
Дата 4.9.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 3
Всего: 37



sharq, плиз поясни подробней про $/. Насколько я знаю, это разделитель входных строк. А не размер буфера.



Это сообщение отредактировал(а) Nab - 4.9.2006, 11:42


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
amg
Дата 4.9.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 9
Всего: 50



Цитата(octave @ 4.9.2006,  01:22)
по коду возможно понятнее, чего я хочу добиться...

А я так и не понял, чего еще нужно добиться. Вроде, в приведенном коде $| вполне успешно включает/выключает буферизацию... Или я не о том?
PM MAIL   Вверх
sharq
Дата 4.9.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 3
Всего: 28



Nab, 

perldoc -f open
perldoc perlvar $/

для Perl версии 5.8.0 и выше.

 smile 


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
octave
Дата 5.9.2006, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.9.2006

Репутация: нет
Всего: нет



Да, проблема была в буферизованном выводе утилиты. В заблуждение меня ввело то, что когда программа работала с терминалом, она выдавала небуферизованный вывод, а когда с пайпом нет (только узнал). Поэтому я думал, что буферизация не используется в ней.

Всем спасибо )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.