Toon posts:

[perl] ping, stderr afvangen van ping command

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben dus een complete newbie op perl gebied, dan ook een echte.

Ik wil op me shell een scriptje hebben wat kijkt of me ppp0 nog up is dmv van een ping. Als dat niet zo is moet ie een ander bestandje draaien. Ik heb al het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
#
#    Checken of de verbinding up is
#

@PING = 'ping -c 1 www.takketyfustering.nl';

foreach $TMPPING (@PING)
  {
    if ($TMPPING eq "ping: unknown host www.takketyfustering.nl")
    {
      print "GOESOJEI!";
    }
  }
exit;

as said....een echte complete newbie...kan iemand me even op weg helpen ?

Verwijderd

Als je zo tegen kamelen bent, wat moet je dan met perl.. :P

anyway, tip: backticks

Verwijderd

Op maandag 21 januari 2002 22:00 schreef Magio het volgende:
ik ben dus een complete newbie op perl gebied, dan ook een echte.

Ik wil op me shell een scriptje hebben wat kijkt of me ppp0 nog up is dmv van een ping. Als dat niet zo is moet ie een ander bestandje draaien. Ik heb al het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
#
#    Checken of de verbinding up is
#

@PING = 'ping -c 1 www.takketyfustering.nl';

foreach $TMPPING (@PING)
  {
    if ($TMPPING eq "ping: unknown host www.takketyfustering.nl")
    {
      print "GOESOJEI!";
    }
  }
exit;

as said....een echte complete newbie...kan iemand me even op weg helpen ?
ik weet niks van Perl, maar kan je ook geen timeout krijgen als je ping failt?

Verwijderd

` i.p.v. '

Verwijderd

Op maandag 21 januari 2002 22:21 schreef MarcoTC het volgende:
` i.p.v. '
in plaats van :?

Verwijderd

Topicstarter
Op maandag 21 januari 2002 22:26 schreef Jppr het volgende:

[..]

in plaats van :?
ging vast om de ` en de ' .... en dat help al een stuk :)

Verwijderd

Op maandag 21 januari 2002 22:30 schreef Magio het volgende:

[..]

ging vast om de ` en de ' .... en dat help al een stuk :)
wat is het verschil tussen die twee dan?

Verwijderd

Topicstarter
ok...nu heb ik het volgende :
code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
#
#    Checken of de verbinding up is
#

$PING = `ping -c 1 www.123456789.nl`;

if ($PING eq "ping: unknown host www.123456789.nl")
  {
    print "GOESOJEI!";
  }
exit;

maar als ik dit dan uitvoer :
code:
1
2
3
[root@localhost scripts]# ./ifup.pl    
ping: unknown host www.123456789.nl
[root@localhost scripts]#

nog iemand een tip ?

Verwijderd

Topicstarter
Op maandag 21 januari 2002 22:31 schreef Jppr het volgende:

[..]

wat is het verschil tussen die twee dan?
met ` werken commandos wel en met ' niet

Verwijderd

Magio:
Dûh, :), de host www.123456789.nl bestaat niet en is écht een unkown host, ping tweakers.net maar ofzow, maar natuurlijk niet een niet-bestaande host ;)

Verwijderd

Topicstarter
Op maandag 21 januari 2002 22:35 schreef dannydude het volgende:
Magio:
Dûh, :), de host www.123456789.nl bestaat niet en is écht een unkown host, ping tweakers.net maar ofzow, maar natuurlijk niet een niet-bestaande host ;)
jah...ik MOET een unknown host hebben....die if kijkt of ik die unknown host terugkrijg en moet dan printen..... of zie ik het nu helemaal verkeerd....

Verwijderd

Op maandag 21 januari 2002 22:37 schreef Magio het volgende:

[..]

jah...ik MOET een unknown host hebben....die if kijkt of ik die unknown host terugkrijg en moet dan printen..... of zie ik het nu helemaal verkeerd....
Aha, maar volgens mij voer je hem echt al uit door die ``, dus geeft ook meteen die error.

Als dat zo is, moet je proberen of je je output kan bufferen en de gebufferde output in een string kan stoppen en die kan valideren.

Als het niet zo is dat de `` meteen uitvoert: ignore this post :P

Verwijderd

Topicstarter
Op maandag 21 januari 2002 22:39 schreef dannydude het volgende:

[..]
Als dat zo is, moet je proberen of je je output kan bufferen en de gebufferde output in een string kan stoppen en die kan valideren.
jah.... as said...een versie newB

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 21 januari 2002 22:31 schreef Jppr het volgende:
wat is het verschil tussen die twee dan?
Hetzelfde als in php ;)

`` betekend "voer het commando uit" en '' betekend "das een string".

Anyway, wat een probleem kan zijn, is dat ping naar stderr, ipv stdout de foutmelding stuurt.

Dan werk `` waarschijnlijk niet echt handig (test het even met ping -c1 unkownhost.com > /dev/null) mocht de melding wel komen

Dan heb je daar iig geen last van ;)

Verder lijkt me de functionaliteit wel redelijk goed :)

[edit]
Dat wordt dus idd naar de stderr geschreven, oftewel de executie van `` levert je geen string op.

Hoe je precies de stderr kan krijgen weet ik ook niet :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

even je topictitel wat bijgeklust :)

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Je kunt natuurlijk ook gewoon de return-value uitlezen van ping..

0 = host alive
1 = host not alive (no/not enough ping replies)
2 = error

Yo dawg, I heard you like posts so I posted below your post so you can post again.


Verwijderd

Topicstarter
Op maandag 21 januari 2002 23:29 schreef JayTaph het volgende:
Je kunt natuurlijk ook gewoon de return-value uitlezen van ping..

0 = host alive
1 = host not alive (no/not enough ping replies)
2 = error
hoe in vredesnaam doe ik dat dan weer ?!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
De meest nette (en hier ook makkelijkste) manier om te verifiëren of een commando correct is uitgevoerd, is door de return code te bekijken (0 == succes). Dat is "$?" in Perl, dus bv:
code:
1
2
`ping -c 1 whatever`;
if($?==0) { print "w00t!"; } else { print "doh!"; }

Als je de uitvoer wilt zien (of wegwerken), dan moet je de error stream redirecten. Dit kan door sh aan te roepen (`/bin/sh -e 'ping -c 1 whatever 2>&1'`) of in Perl zelf:
code:
1
2
3
4
open(ERR,">&STDERR");
open(STDERR,">&STDOUT");
`ping -c 1 whatever`;
open(STDERR,">&ERR")

Verwijderd

Topicstarter
Op dinsdag 22 januari 2002 00:40 schreef Soultaker het volgende:
De meest nette (en hier ook makkelijkste) manier om te verifiëren of een commando correct is uitgevoerd, is door de return code te bekijken (0 == succes). Dat is "$?" in Perl, dus bv:
code:
1
2
`ping -c 1 whatever`;
if($?==0) { print "w00t!"; } else { print "doh!"; }

Als je de uitvoer wilt zien (of wegwerken), dan moet je de error stream redirecten. Dit kan door sh aan te roepen (`/bin/sh -e 'ping -c 1 whatever 2>&1'`) of in Perl zelf:
code:
1
2
3
4
open(ERR,">&STDERR");
open(STDERR,">&STDOUT");
`ping -c 1 whatever`;
open(STDERR,">&ERR")
thx ! was net wat ik nodig had, dat met de $? !
Pagina: 1