[Moscow.pm] Перехватить STDERR

Ruslan Zakirov ruslan.zakirov на gmail.com
Ср Янв 14 07:16:15 PST 2009


sub buffered_stderr {
my $code = shift;
my $buf = '';
local *STDERR;
open STDERR, '>:raw', \$buf;
return $buf, $code->();
}

пойдет?

2009/1/14 Dmitry E. Oboukhov <unera на debian.org>:
> есть задача перехватить весь STDERR и выдать его потом
> в скажем функции get_stderr
>
> все это дело происходит в бааальшом проекте
> в контексте
> use utf8;
> use open qw(:std :utf8);
>
> раньше перехват делался примерно так:
>
> 0. создаем два пайпа
> 1. основной процесс форкается
> 2. один пайп превращаем в STDERR по нему все гонится в дочку
> 3. по второму пайпу вычитываем из дочки содержимое STDERR.
>
> все работает, но хочется избавиться от форка.
>
> попробовал я заменить STDERR на объект IO::String, работает
> в пределах одного теста, но в проекте натыкается на
> use open qw(:std :utf8); и обламывается на том что не может
> сделать binmode.
>
> можно ли как-то
> 1. обойтись без форка
> 2. обойтись без изъятия директивы use open qw(:std :utf8);?
> --
> ... mpd playing: U.D.O. - Heart Of Gold
>
> . ''`.                               Dmitry E. Oboukhov
> : :'  :   email: unera на debian.org jabber://UNera@uvw.ru
> `. `~'              GPGKey: 1024D / F8E26537 2006-11-21
>  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEARECAAYFAklt/ZYACgkQq4wAz/jiZTfJNACfZF4OQm9HXLscP/rXNTtMHZHN
> rv0An0JvIEsGYC9t3+5FbU+M3u7bL3Mh
> =UuYF
> -----END PGP SIGNATURE-----
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm