Forum Webscript.Ru

Программирование => Perl => Тема начата: Nickola от 13 Октября 2006, 20:29:46

Название: Проблема при получении вывода STDERR (+)
Отправлено: Nickola от 13 Октября 2006, 20:29:46
Мне нужно получить то, что выводит в STDERR запускаемое через system() приложение.
Делаю так:

local *OLD;
open OLD, \'>&STDERR\';
close(STDERR);
if (!open (STDERR, \'>err.txt\')) { die "Unable to open STDERR"; }

my $c ="perl -e \\" print STDERR \'ERR\';\\"";
my $res = system($c);

open(STDERR,\'>&OLD\');

После выполнения скрипта в файле \'err.txt\' вижу \'ERR\' - т.е. все работает как надо.

Но мне надо этот вывод получить в переменную, делаю так:

local *OLD;
open OLD, \'>&STDERR\';
close(STDERR);

open (STDERR, \'>\', \\$output) || &die_error("Unable to open STDERR");

my $c ="perl -e \\" print STDERR \'ERR\';\\"";
my $res = system($c);

open(STDERR,\'>&OLD\');

print "OUT: ".$output;

После выполнения скрипта вижу: "OUT: ", т.е. STDERR не попал в переменную $output.

Подскажите, в чем проблема?

Thanx!
Название: Проблема при получении вывода STDERR (+)
Отправлено: arto от 13 Октября 2006, 21:40:32
perldoc -f open
Название: Проблема при получении вывода STDERR (+)
Отправлено: Nickola от 16 Октября 2006, 11:02:03
Цитировать
arto:
perldoc -f open

Что-то я не нашел там решения, пробовал сделать:

$| = 1; # make unbuffered


Но это не решило проблему...
Название: Проблема при получении вывода STDERR (+)
Отправлено: arto от 16 Октября 2006, 11:09:07
# perl -de0
...
  DB<1> open F,"date 12121212 2>&1 |"

  DB<2> @a =

  DB<3> p @a
date: cannot set date: Operation not permitted
Tue Dec 12 12:12:00 EET 2006

  DB<4>
Название: Проблема при получении вывода STDERR (+)
Отправлено: Nickola от 16 Октября 2006, 11:23:21
Цитировать
arto:
# perl -de0
...
DB<1> open F,"date 12121212 2>&1 |"

DB<2> @a =

DB<3> p @a
date: cannot set date: Operation not permitted
Tue Dec 12 12:12:00 EET 2006

DB<4>


Я думал что "2>&1" в Windows рабоать не будет, оказалось рабоает.
Спасибо.
Название: Проблема при получении вывода STDERR (+)
Отправлено: Nickola от 16 Октября 2006, 11:34:24
Цитировать
arto:
# perl -de0
...
DB<1> open F,"date 12121212 2>&1 |"

DB<2> @a =

DB<3> p @a
date: cannot set date: Operation not permitted
Tue Dec 12 12:12:00 EET 2006

DB<4>


Не подскажите, а можно ли при этом получить "error code", который вернула запускаемая программа?
Название: Проблема при получении вывода STDERR (+)
Отправлено: Nickola от 16 Октября 2006, 11:40:38
Цитировать
Nickola:
Не подскажите, а можно ли при этом получить "error code", который вернула запускаемая программа?


Нашел - "$?".