Toon posts:

[perl] systeem commando uitvoeren

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een bestand die iedere dag een backup.zip van het web moet afplukken. Nu wil ik dat de output naar mij gemaild wordt voor controle. Maar ik krijg de output niet te pakken, ik gebruik dit:
code:
1
2
3
4
my @test = `wget --http-user=xx --http-passwd=xx http://xx:5000/backup.zip`;
for ($item = 0; $item < (scalar @test); $item++) {
    print $item,": ",@test[$item];
};

Hij zou nu alle regels met een getal ervoor weer moeten geven, dat doet hij niet, hij voert wel het commando uit, maar de output krijg ik niet in een variabele. Wat gaat er fout?
Als ik dus "perl script.pl" doe in de linux console zie ik dus wel dat ie alles download, maar niet op de goede manier.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Je maakt een paar fouten:
code:
1
2
3
4
my @test = `wget --http-user=xx --http-passwd=xx http://xx:5000/backup.zip`;
for ($item = 0; $item < (scalar @test); $item++) {
    print $item,": ",@test[$item];
};

Probeer dit eens:
code:
1
2
3
4
my @test = `wget --http-user=xx --http-passwd=xx http://xx:5000/backup.zip`;
foreach (@test)
{ print "Item: $_\n";
}

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Je denkt misschien dat @test een hash is ofzo, maar het is gewoon een array. Je kunt dus wel $test[0] opvragen (let op de $, geen @) maar @test[$blaat] is echt onzin.

Tip: gebruik de module LWP::Simple. Die staat ergens op CPAN en werkt erg fijn i.m.h.o.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

Topicstarter
Maar hoe voorkom je dan dat ie de output naar het scherm knalt zonder print commando's ed?

Mijn scripje werkt namelijk wel als je als commando "ping xx -c 10" ofzo opgeeft...

Verwijderd

Topicstarter
Op dinsdag 16 oktober 2001 18:11 schreef Jaaap het volgende:
Je denkt misschien dat @test een hash is ofzo, maar het is gewoon een array. Je kunt dus wel $test[0] opvragen (let op de $, geen @) maar @test[$blaat] is echt onzin.

Tip: gebruik de module LWP::Simple. Die staat ergens op CPAN en werkt erg fijn i.m.h.o.
ik heb ff zitten loeren, maar Simple is toch een module om content in een bestand op te halen? Lijkt me niet echt betrouwbaar als ik een gezipte backup van 90MB ophaal:?

Verwijderd

Topicstarter
code:
1
2
3
4
5
@test = `wget --http-user=xx --http-passwd=xx http://xx:5000/backup.zip`;

print "\n??\n";

print "\nItem: ".$test[1]."<<";

Dit zou moeten werken, wat ik zie op het scherm is eerst de output van wget, dan ?? en daarna niets meer. Ik snap het niet meer:?

[edit]
Nu heb ik de rest van het document weggegooid, en nu geeft ie:
output wget
??

Item: <<

  • BOOTZ
  • Registratie: Maart 2001
  • Laatst online: 16-09 09:54
deel van een scriptje wat ik ooit gemaakt heb:
code:
1
2
3
4
5
@args = ( "$INPUT{cmd} >/home/httpd/cgi-bin/ps/command_output.txt" );
system @args;
open(OP, "/home/httpd/cgi-bin/ps/command_output.txt");
@cmd = <OP>;
close OP;

wat ie doet, is $INPUT{cmd} uitvoeren en de output in /home/httpd/cgi-bin/ps/command_output.txt schrijven. vervolgens opent ie dat bestand en leest daar de output uit en stuurt die (in een ander stuk van de code) naar je webbrowser

Maak je eigen poll


Verwijderd

Topicstarter
Nou zeg, dan staat er niets in het bestand waar die naartoe zou moeten schrijven, wel naar het scherm.....

Ik snap er echt geen fluit meer van...

  • BOOTZ
  • Registratie: Maart 2001
  • Laatst online: 16-09 09:54
huh? das vaag, bij mij werkte deze code

opdracht >bestandsnaam
zorgt er namelijk voor dat _alle_ output naar dat bestand gaat (zowel bij linux/unix als bij windows)
vervolgens lees je dat bestand weer in en je hebt de output. maar misschien werkt wget niet helemaal mee...

Maak je eigen poll


Verwijderd

Topicstarter
Het ligt idd aan wget als ik "wget ... >test.txt" doet in de console staat er niets in test.txt hetzelfde geld voor een cp commando, maar bijv "arp -n >test.txt" zet wel alles in test.txt :? :?

  • Ees
  • Registratie: Juli 2001
  • Laatst online: 29-07 15:00

Ees

De manpage is er niet erg duidelijk over, maar wget stuurt z'n output naar STDERR. Dus bijvoorbeeld:

my @output = `wget http://bla.die.bla/ 2>&1`;

Zie: "perldoc -q stderr" / "man perlfaq8".

  • Juup
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 16 oktober 2001 19:20 schreef Thunderbird het volgende:
ik heb ff zitten loeren, maar Simple is toch een module om content in een bestand op te halen? Lijkt me niet echt betrouwbaar als ik een gezipte backup van 90MB ophaal:?
Je wilt hier via http een file van tig MB binnenhalen. Zowel wget als LWP::Simple kunnen met http servers praten en voor beiden is het even 'moeilijk' om een zip van 90 MB binnen te zuigen. Betrouwbaarheid heeft daar weinig mee van doen.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

Topicstarter
Op dinsdag 16 oktober 2001 19:33 schreef BOOTZ het volgende:
deel van een scriptje wat ik ooit gemaakt heb:
code:
1
2
3
4
5
@args = ( "$INPUT{cmd} >/home/httpd/cgi-bin/ps/command_output.txt" );
system @args;
open(OP, "/home/httpd/cgi-bin/ps/command_output.txt");
@cmd = <OP>;
close OP;
ik gebruik nu dus code like this, ,aar met het verschil dat ik 2> (die 2 dus) erachter zet, dat werk wel. Maar bij een ls commando moet er weer geen 2 staan. Maargoed het werkt nu iedereen bedankt! :)
Pagina: 1