|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1866588fa3907.html, оценка из 5, голосов 10
|