|
|
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
|