Portál AbcLinuxu, 11. května 2025 06:53

Dotaz: Perl odchytavanie vystupu pomocou open z programu

29.3.2010 16:51 miso
Perl odchytavanie vystupu pomocou open z programu
Přečteno: 304×
Odpovědět | Admin
Ahojte,
potreboval by som poradit s jednou drobnostou lebo neviem z dokumentacie zistit kde robim chybu.

Mam jednoduchy perlovy skript ktory pomocou open spusti externy program a odchytava z neho vystup ktory parsuje a zapisuje do logu.
open PARSER, "/usr/sbin/program |" or die "Error\n";
while (PARSER) { # PARSER je v hranatych zatvorkach len mi to nepovolilo odoslat
++$i;
# tu nasleduje spracovanie prichadzajuceho vystupu
}
Funguje to presne tak ako potrebujem lenze ten perlovy skript je spraveny na to aby bol spusteny z udev daemonu a bezal na pozadi. A vtedy nastane ten problem ze skript sa spusti, v procesoch ho vidim ale z spusteneho programu vtedy nedokaze zachytit ziadny vystup.
Vie mi niekto poradit kde robim chybu? dakujem
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.3.2010 19:46 Xerces
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, a co znamená to .... ze spusteneho programu vtedy nedokaze zachytit ziadny vystup .... Jak to zachytavas? Respektive naznac co mas v tom cyklu. Zapis do jineho souboru?

P.S. Hranaty zavorky myslis, < > nebo []?
29.3.2010 20:15 miso
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Je tam regulerny vyraz ktory este ten vystup rozkuskuje. Vystup bere z premennej $_
Samozrejme som myslel < >, takze nie hranate :)
29.3.2010 20:32 Xerces
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Ok. Kdyz to rozparsujes, tak to ukladas do souboru nebo vypisujes na STDOUT? Ptam se takhle blbe proto, ze prave vypis na STDOUT by mohl být, v pripade sousteni na pozadi, nebo obecne jakkoliv, kdyz nejsi pripojen k tty, problematicky.
30.3.2010 09:05 miso
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Vsetko ide do suboru
29.3.2010 20:41 Xerces
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Jeste dotaz. Kdyz jsi to spoustel normalne z konzoli, tak ti to fungovalo skutecne s tim /usr/sbin/program? V /usr/sbin byvaji vetsinou programy typu daemon, ktery se samy o sobe spousteji na pozadi a detachujou se od konzole. U nekterych tomu lze parametrem zabranit. Ja jen, ze mi prijde, ze se snazis udelat nejaky wrapper na daemona.
30.3.2010 09:16 miso
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Nechcel som to zbytocne komplikovat tak som nepisal konkretny program. Spusta sa jpnevulator.
Je umiestneny v /usr/bin/, predtym som tam mal vlastny skript ktory som daval do /usr/sbin preto ta nepresnost.
Je to serial sniffer ktory mi na obrazovku hadze komunikaciu z USB/Serial prevodniku, zobrazuje jednoduchu komunikaciu v hex a ja odlisujem podla toho regulerneho vyrazu tri druhy informacii. Tie potom zapisem do suboru.
Tento program dokaze zapisovat aj do suboru, povodne som to chcel citat z toho suboru ale takto sa mi to zdalo vyhodnejsie kedze pokial dojde k ukonceniu jpnevulator skonci aj ten perl skript.
Ako som spominal, pokial ten perl skript pustim z bashu tak sa mi to do suboru zapise, pokial ho spusti udev daemon tak ziadna komunikacia z jpnevulator neprechadza. V procesoch vidim ze bezi, do logu sa mi zapise ze sa ten perl skript spustil ale ziadny vystup z jpnevulatoru neprejde.
30.3.2010 09:41 Xerces
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Jak to spouštíš z toho udevu? Problém bude spíš tu než v Perl kodu.
30.3.2010 13:29 miso
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
ACTION=="add", SUBSYSTEM=="usb" ATTRS{interface}=="USB-Serial", RUN+="/usr/bin/perl /usr/bin/skript.pl" Ten skript sa ale spusti, presne vtedy kedy ma. Mal by som pouzit nejaky parameter navyse?
30.3.2010 15:30 Xerces
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Zkus použít udevadm test a nasimulovat to připojení na USB. Bohužel v udev se moc neorientuji, předpokládal jsem že to bude problém někde v Perlu. :-(
30.3.2010 16:31 miso
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Aj tak dakujem za snahu. Naozaj bude problem asi v udev kedze som to teraz skusal spustit cez cron a vsetko funguje. Idem hladat dalej :)
29.3.2010 20:04 Xerces
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jinak díval jsem se teď do svýho skriptíku, ve kterém taky spouštím soubor na pozadí a jeho výstup zachytávám do souboru a mám to takhle ....
open PARDER, "-|", "/usr/sbin/program" or die "Error";
while (my $radek = <PARSER>) {

}
29.3.2010 20:45 Xerces
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
Napsal jsem to nepresne. V mem prikladu je /usr/sbin/program obycejny program (nikoliv daemon), ktery normalne chvilku neco vypisuje a pak skonci. Ja ten vystup zachytavam, parsuju a vysledek ukladam do souboru. Toto vse pak poustim na pozadi pomocí cronu.
30.3.2010 09:21 miso
Rozbalit Rozbalit vše Re: Perl odchytavanie vystupu pomocou open z programu
ako som teraz pisal hore tak ten program ktory spustam tiez nieje daemon. S tym rozdielom ze neskonci sam, bezi az pokial ten proces neukoncim sam.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.