Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alexander Semenov                    2:5020/400     23 May 2000  09:40:02
 To : All
 Subject : open2 на ASPerl под Win32. Хотя бы объясните.
 -------------------------------------------------------------------------------- 
 
 Добрый день All!
 
 Сразу пример:
 ------------------------------------------------------------
 use IPC::Open3;
 {
 print "1";
 local $SIG{CHLD}='IGNORE';
 print "2";
 $pid = open3( \*Writer, \*Reader, \*Errorer, "cat -u" );
 print "3";
 print Writer "stuff\n";
 print "4";
 Writer->close();
 print "5";
 $got = <Reader>;
 print "6";
 print $got;
 print "7";
 Reader->close();
 print "8";
 # $got = <Errorer>;
 print "9";
 print $got;
 print "A";
 Errorer->close();
 print "B";
 }
 --------------------------------------------------------
 Это почти классический пример из О'Рейли. Все работает как надо.
 (Кстати, все классические примеры из книжек работают как обещалось,
 что наталкивает на мысль, что чего-то не понимаю я, а не
 ASPerl/Win32).
 
 В приведенном примере раскоментируем единственную закоментаренную
 строчку - все виснет - но ГДЕ? Попробуйте угадать? Hа open3. Т.е.
 скрипт
 пишет '12' и замолкает навеки. Я понимаю, что cat не пишет в stderr,
 но
 заранее то этого никто знать не может. Почему на open3 ??? Я понимаю,
 что в open3 что-то форкается, но приведите какой- нибудь
 правдоподобный
 алгоритм. Еще наблюдения:
 - под отладчиком все идет до '12345678' т.е. виснет на чтении из
 пустого stderr,
    что логично.
 - под линуксом скрипт исполняется так: '12123456789AB', при этом
 чтение
    из пустого stderr просто возвращает undefined. Таким образом,
 получается,
    open3 исполняется дважды, а завершается успешно один раз?
 
 какие есть работающие методы этого? Пробовал через fork и Win32::Pipe,
 но пайпы искажают информацию: в одну сторону строки кончаются
 \x0D\x0D\x0A, в другую сторону пока не понял... binmode их не ест,
 т.к.,
 к файлам Win32::Pipe не имеет никакого отношения...
 
 --
 Спасибо,
 С уважением,
 Александр Семенов <sav@hey.to>
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 open2 на ASPerl под Win32. Хотя бы объясните.   Alexander Semenov   23 May 2000 09:40:02 
 Re: open2 на ASPerl под Win32. Хотя бы объясните.   Pavel Zheltouhov   25 May 2000 20:10:35 
 Re: open2 на ASPerl под Win32. Хотя бы объясните.   Alex Lazarev   26 May 2000 12:09:58 
Архивное /ru.perl/1866588fa3907.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional