Написал скрипт:
Код: Выделить всё
#!/usr/bin/perl
$result=`fping -c4 -q xx.xx.xx.xx`;
print "\<$result\>\n";
Код: Выделить всё
#!/usr/bin/perl
$result=`fping -c4 -q xx.xx.xx.xx`;
print "\<$result\>\n";
Код: Выделить всё
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 писал(а):Если внимательно посмотреть мой код, то можно заметить, что я использую не стандартный пинг.
Код: Выделить всё
/sbin/fping
Код: Выделить всё
host# ./test.pl
xx.xx.xx.xx : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.15/0.21/0.27
<>
host#
А у меня что ?If your goal is to capture output, you should use the backtick operator:
$result = `PROGRAM`;
Код: Выделить всё
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#
ты путь написал? какой путь?iye писал(а):Вот что я получаю на выполнение в консоли:Как мы видим проблема не в путях, не в многострочном выводе, а проблема в том что команда пишет вывод как то по хитрому.Код: Выделить всё
host# ./test.pl xx.xx.xx.xx : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0.15/0.21/0.27 <> host#
iye писал(а):омг.. зачем путь то писать если команда выполняется ? Вот если бы оно писало что фалй не найден - там да в путях дело. Но команда то выполняется! Ладно .. прописал .. результат не изменился.
zg писал(а):намёк ясен?
- я бы предпочел ключевое слово )намёк ясен?
вывод статистики идёт на STDERR, бэктик собирает данные из STDOUTzg писал(а):намёк ясен?Код: Выделить всё
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#
Код: Выделить всё
open(PIPE,'prog |');
while(<PIPE>){
}
нафиг изварты, там стандратный shhizel писал(а):но есть кучка извратов шобэ хавать все
Код: Выделить всё
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#
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:
hizel писал(а):но забывать о
Код: Выделить всё
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 писал(а):костыли в виде шелла
Код: Выделить всё
#!/usr/local/bin/perl -w
$ENV{SHELL} = '/bin/sh';
$result = `fping -qc4 127.0.0.1 2>\&1`;
print "Result: $result";
Код: Выделить всё
open( OUT2, "ffmpeg -i 1.flv |" );
# #$/ = '';
my @out = <OUT2>;
close OUT2;
print @out;
if (@out) {
print '111';
}
Код: Выделить всё
$out = system ("stty", '-icanon', 'eol', "\001");
print $out;
Код: Выделить всё
#!/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 $_;
}
Код: Выделить всё
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