Автор Тема: Проблема при получении вывода STDERR (+)  (Прочитано 3982 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nickola

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Мне нужно получить то, что выводит в 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!

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Проблема при получении вывода STDERR (+)
« Ответ #1 : 13 Октября 2006, 21:40:32 »
perldoc -f open

Оффлайн Nickola

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема при получении вывода STDERR (+)
« Ответ #2 : 16 Октября 2006, 11:02:03 »
Цитировать
arto:
perldoc -f open

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

$| = 1; # make unbuffered


Но это не решило проблему...

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Проблема при получении вывода STDERR (+)
« Ответ #3 : 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>

Оффлайн Nickola

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема при получении вывода STDERR (+)
« Ответ #4 : 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 рабоать не будет, оказалось рабоает.
Спасибо.

Оффлайн Nickola

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема при получении вывода STDERR (+)
« Ответ #5 : 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", который вернула запускаемая программа?

Оффлайн Nickola

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема при получении вывода STDERR (+)
« Ответ #6 : 16 Октября 2006, 11:40:38 »
Цитировать
Nickola:
Не подскажите, а можно ли при этом получить "error code", который вернула запускаемая программа?


Нашел - "$?".

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28