Forum Webscript.Ru
Программирование => Perl => Тема начата: 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!
-
perldoc -f open
-
arto:
perldoc -f open
Что-то я не нашел там решения, пробовал сделать:
$| = 1; # make unbuffered
Но это не решило проблему...
-
# 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>
-
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 рабоать не будет, оказалось рабоает.
Спасибо.
-
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:
Не подскажите, а можно ли при этом получить "error code", который вернула запускаемая программа?
Нашел - "$?".