[PERL]Чтение вывода системной команды

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
iye
ст. сержант
Сообщения: 360
Зарегистрирован: 2008-07-29 9:02:04

[PERL]Чтение вывода системной команды

Непрочитанное сообщение iye » 2009-03-19 9:28:30

Приветствую!
Написал скрипт:

Код: Выделить всё

#!/usr/bin/perl

$result=`fping -c4 -q xx.xx.xx.xx`;
print "\<$result\>\n";
И почему то результат выполнения fping -c4 -q xx.xx.xx.xx никак не загоняется в переменную... почитал доки, вроде все верно делаю. Подскажите плз, в чем я не прав ? Заранее благодарен за ответы.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение Alex Keda » 2009-03-19 9:47:06

Код: Выделить всё

lissyara$ perl /tmp/a.pl
<PING 172.17.8.8 (172.17.8.8): 56 data bytes
64 bytes from 172.17.8.8: icmp_seq=0 ttl=127 time=0.346 ms
64 bytes from 172.17.8.8: icmp_seq=1 ttl=127 time=0.210 ms
64 bytes from 172.17.8.8: icmp_seq=2 ttl=127 time=0.191 ms
64 bytes from 172.17.8.8: icmp_seq=3 ttl=127 time=0.184 ms
64 bytes from 172.17.8.8: icmp_seq=4 ttl=127 time=0.161 ms

--- 172.17.8.8 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.161/0.218/0.346/0.066 ms
>
lissyara$ more /tmp/a.pl
#!/usr/bin/perl
#
$result=`/sbin/ping -c 5 172.17.8.8`;
print "\<$result\>\n";

lissyara$    
?

Код: Выделить всё

man hands.ko
Убей их всех! Бог потом рассортирует...

iye
ст. сержант
Сообщения: 360
Зарегистрирован: 2008-07-29 9:02:04

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение iye » 2009-03-19 9:52:05

Если внимательно посмотреть мой код, то можно заметить, что я использую не стандартный пинг.

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение f_andrey » 2009-03-19 10:32:06

iye писал(а):Если внимательно посмотреть мой код, то можно заметить, что я использую не стандартный пинг.
А "Если внимательно посмотреть" код лисяры то можно понять, в чем ваша проблема :st:
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

iye
ст. сержант
Сообщения: 360
Зарегистрирован: 2008-07-29 9:02:04

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение iye » 2009-03-19 10:40:37

Если вы намекаете на то что там будет вывод больше чем одной строки -вы ошибаетесь.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение ProFTP » 2009-03-19 10:54:20

Код: Выделить всё

/sbin/fping
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение thefree » 2009-03-19 11:01:34

стоит обратить внимание на
http://perl.about.com/od/programmingper ... system.htm
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

iye
ст. сержант
Сообщения: 360
Зарегистрирован: 2008-07-29 9:02:04

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение iye » 2009-03-19 11:04:39

Вот что я получаю на выполнение в консоли:

Код: Выделить всё

host# ./test.pl
xx.xx.xx.xx : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.15/0.21/0.27
<>
host#
Как мы видим проблема не в путях, не в многострочном выводе, а проблема в том что команда пишет вывод как то по хитрому.

iye
ст. сержант
Сообщения: 360
Зарегистрирован: 2008-07-29 9:02:04

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение iye » 2009-03-19 11:07:15

If your goal is to capture output, you should use the backtick operator:
$result = `PROGRAM`;
А у меня что ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение zg » 2009-03-19 11:14:02

Код: Выделить всё

zg# fping -c4 -q 127.0.0.1 > /dev/null
127.0.0.1 : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.03/0.04/0.06
zg#
намёк ясен?

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение ProFTP » 2009-03-19 11:15:33

iye писал(а):Вот что я получаю на выполнение в консоли:

Код: Выделить всё

host# ./test.pl
xx.xx.xx.xx : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.15/0.21/0.27
<>
host#
Как мы видим проблема не в путях, не в многострочном выводе, а проблема в том что команда пишет вывод как то по хитрому.
ты путь написал? какой путь?

/usr/local/bin/fping
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

iye
ст. сержант
Сообщения: 360
Зарегистрирован: 2008-07-29 9:02:04

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение iye » 2009-03-19 11:18:48

омг.. зачем путь то писать если команда выполняется ? Вот если бы оно писало что фалй не найден - там да в путях дело. Но команда то выполняется! Ладно .. прописал .. результат не изменился.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение zg » 2009-03-19 11:19:47

iye писал(а):омг.. зачем путь то писать если команда выполняется ? Вот если бы оно писало что фалй не найден - там да в путях дело. Но команда то выполняется! Ладно .. прописал .. результат не изменился.
zg писал(а):намёк ясен?

iye
ст. сержант
Сообщения: 360
Зарегистрирован: 2008-07-29 9:02:04

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение iye » 2009-03-19 11:20:31

намёк ясен?
- я бы предпочел ключевое слово )

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение zg » 2009-03-19 11:21:46

zg писал(а):

Код: Выделить всё

zg# fping -c4 -q 127.0.0.1 > /dev/null
127.0.0.1 : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.03/0.04/0.06
zg#
намёк ясен?
вывод статистики идёт на STDERR, бэктик собирает данные из STDOUT


Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение hizel » 2009-03-19 11:28:08

Net::Ping чем не подходит?

и popen никто не отменял, правда в стандартной конструкции

Код: Выделить всё

open(PIPE,'prog |');
while(<PIPE>){
}
кушается только STDOUT
но есть кучка извратов шобэ хавать все, есть в факе
http://perldoc.perl.org/perlfaq8.html#H ... command%3f
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение zg » 2009-03-19 11:42:40

hizel писал(а):но есть кучка извратов шобэ хавать все
нафиг изварты, там стандратный sh

Код: Выделить всё

zg# cat 1.sh
#!/usr/local/bin/perl -w
open(PIPE,'fping -qc4 127.0.0.1 2>&1 |');
while(<PIPE>){print "--- Line\n";print; print "--- end line\n"}
zg# ./1.sh
--- Line
127.0.0.1 : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.03/0.04/0.06
--- end line
zg#

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение hizel » 2009-03-19 11:48:23

но забывать о
Note that you must use Bourne shell (sh(1)) redirection syntax in backticks, not csh(1)! Details on why Perl's system() and backtick and pipe opens all use the Bourne shell are in the versus/csh.whynot article in the "Far More Than You Ever Wanted To Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz . To capture a command's STDERR and STDOUT together:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение zg » 2009-03-19 11:58:31

hizel писал(а):но забывать о
:smile:

Код: Выделить всё

zg# cat 1.sh
#!/usr/local/bin/perl -w

$result = `sh -c 'fping -qc4 127.0.0.1 2>&1'`;
print "Result: $result";

zg# ./1.sh
Result: 127.0.0.1 : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.03/0.04/0.07
zg#

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение hizel » 2009-03-19 12:11:04

костыли в виде шелла :roll:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение zg » 2009-03-19 12:43:30

hizel писал(а):костыли в виде шелла :roll:
так тоже костыль?

Код: Выделить всё

#!/usr/local/bin/perl -w

$ENV{SHELL} = '/bin/sh';

$result = `fping -qc4 127.0.0.1 2>\&1`;
print "Result: $result";
ЗЫ: с такими темпами скоро на перле буду писать :crazy:

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение hizel » 2009-03-19 13:03:45

некромант :roll:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение ProFTP » 2009-12-10 8:14:19

не получается записать вывод в переменную или в массив (в скрипте)

вообщем есть код c ffmpeg, как но неопределеяется вывод прогарммы
как прочитать вывод команды?

Код: Выделить всё

   
 open( OUT2, "ffmpeg -i 1.flv |" );
# #$/ = '';
my @out = <OUT2>;
close OUT2;

print @out;

if  (@out) {
print '111';
}
обратные кавычки, тоже, не работают с ffmpeg

в других случаях у меня всегда работало

=====
=====

и что должно быть?

Код: Выделить всё

$out = system ("stty", '-icanon', 'eol', "\001");
print $out;
переменная всегда равняется 0


===

данный код, тоже что-то не работает

Код: Выделить всё

#!/usr/bin/perl

$ENV{SHELL} = '/bin/sh';

$result = `fping -qc4 127.0.0.1 2>\&1`;
print "Result: $result"
такой код работает

Код: Выделить всё

open(PIPE,'ping -c4 127.0.0.1 2>\&1 |');

while(<PIPE>){
print $_;
print $_;
}

такой код не работает, ничего не выводит вообще с переменной $_ $_...

Код: Выделить всё

open(PIPE,'ffmpeg -i  1.flv 2>\&1 |');

while(<PIPE>){
print $_;
print $_;
}
в чем дело? там вывод другой какой-то?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [PERL]Чтение вывода системной команды

Непрочитанное сообщение ProFTP » 2009-12-10 9:09:39

оно падло вывод толкало в STDERR

так и так работает

Код: Выделить всё

     use IPC::Open3;
    use Symbol qw(gensym);
    my $pid = open3(gensym, ">&STDERR", \*PH, "ffmpeg -i 1.flv");
    while( <PH> ) { print $_; print $_}
    waitpid($pid, 0);

Код: Выделить всё

    use IPC::Open3;
   use Symbol qw(gensym);
    use IO::File;
    local *CATCHOUT = IO::File->new_tmpfile;
    local *CATCHERR = IO::File->new_tmpfile;
    my $pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", "ffmpeg -i 1.flv");
    waitpid($pid, 0);
    seek $_, 0, 0 for \*CATCHOUT, \*CATCHERR;
    while( <CATCHOUT> ) {
#print $_;
#print $_;
  }
   while( <CATCHERR> ) {
print $_;
print $_;

}

Код: Выделить всё

./perl2.pl
FFmpeg version SVN-r14424, Copyright (c) 2000-2008 Fabrice Bellard, et al.
FFmpeg version SVN-r14424, Copyright (c) 2000-2008 Fabrice Bellard, et al.
  configuration: --cc=cc --prefix=/usr/local --disable-debug --enable-memalign-hack --enable-shared --enable-postproc --extra-cflags=-I/usr/local/include/vorbis -I/usr/local/include --extra-ldflags=-L/usr/local/lib -la52 --extra-libs=-pthread --enable-gpl --enable-pthreads --enable-swscale --mandir=/usr/local/man --enable-liba52 --enable-liba52bin --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libamr-nb --enable-nonfree --enable-libamr-wb --enable-nonfree --disable-mmx --enable-libgsm --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid
  configuration: --cc=cc --prefix=/usr/local --disable-debug --enable-memalign-hack --enable-shared --enable-postproc --extra-cflags=-I/usr/local/include/vorbis -I/usr/local/include --extra-ldflags=-L/usr/local/lib -la52 --extra-libs=-pthread --enable-gpl --enable-pthreads --enable-swscale --mandir=/usr/local/man --enable-liba52 --enable-liba52bin --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libamr-nb --enable-nonfree --enable-libamr-wb --enable-nonfree --disable-mmx --enable-libgsm --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid
  libavutil version: 49.7.0
  libavutil version: 49.7.0
  libavcodec version: 51.61.0
  libavcodec version: 51.61.0
  libavformat version: 52.18.0
  libavformat version: 52.18.0
  libavdevice version: 52.0.0
  libavdevice version: 52.0.0
  built on Dec  5 2009 13:18:43, gcc: 4.2.1 20070719  [FreeBSD]
  built on Dec  5 2009 13:18:43, gcc: 4.2.1 20070719  [FreeBSD]


Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 29.67 (89/3)
Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 29.67 (89/3)
Input #0, flv, from '1.flv':
Input #0, flv, from '1.flv':
  Duration: 00:06:22.68, start: 0.000000, bitrate: 64 kb/s
  Duration: 00:06:22.68, start: 0.000000, bitrate: 64 kb/s
    Stream #0.0: Video: vp6f, yuv420p, 640x480, 29.67 tb(r)
    Stream #0.0: Video: vp6f, yuv420p, 640x480, 29.67 tb(r)
    Stream #0.1: Audio: mp3, 22050 Hz, mono, 64 kb/s
    Stream #0.1: Audio: mp3, 22050 Hz, mono, 64 kb/s
Must supply at least one output file
Must supply at least one output file
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение