Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: PK13 15. 10. 2012, 13:30:34
-
Ahoj,
potřeboval bych poradit (googlení moc nikam nevedlo :( ).
Představte si, že na stroji, ke kterému mám ssh přístup, je script, který generuje řádek po řádku nějaká data.
Například:
#!/bin/bash
for i in $(seq 1 2000)
do
echo $i
sleep 0.1
done
Já bych tato data potřeboval nějak zpracovávat (nejlépe python script není však podmínkou) a pak "printit" výsledky.
(Např: k prvnímu přičíst 1, k druhému 2 atd... až do nekonečna, resp. dokud mi budou přes ssh chodit data a výsledky vypisovat do terminálu)
Bohužel nevím jak to udělat (s bashem jsem úplný začátečník a s pythonem řekněme pokročilý začátečník). Nedokázal by někdo jednoduše popsat, jak na to?
Mockrát děkuji za odpovědi :)
-
Neco jako (ale fakt halucinuju - nemam uz ten stary dobry shell skill - musis otestovat)
for i in $(tail -f /var/log/ssh.log | awk {'print 1'}); do echo $i >>| /home/me/myfile; done
ale to ti nebude pravdepodobne fungovat protoze jsem to vyhalucinoval z fleku.
Muzes to delat davkove, pokud nepotrebujes realtime odpoved.
A nebo toto:
http://pyinotify.sourceforge.net/
-
A to to nemůžeš sypat do databáze?
A) Pokud to jsou data o která můžeš přijít, tak použij memory table
CREATE TEMPORARY TABLE IF NOT EXISTS `tmplog` (`msg` varchar(512)) ENGINE=Memory DEFAULT CHARSET=latin1;
Pokud ne nebo zápasíš s pamětí, tak přes table.
B) Přistupovat do DB můžeš i přes SSH.
No a na obou stranách můžeš z Pytlouna přistupovat do DB:
http://www.google.cz/search?q=python+access+to+mysql
Tím vyřešíš problémy jako výpadek spojení a tak.
-
Jen zvedavost:
Jak databaze notifikuje o tom, ze do ni pribyl radek?
Neni nahodou filesystem jenda z nejgenialnejsich databazi a pokud ssh loguje do filu, tak pak presypavat ten file do databaze je malicky overhead?
Diky za vyskoleni luzra jakym jsem - zen 4 ever - koans 4 ever - UNIX 5 ever ;o)
-
Jo a taky případné rozparsování a vedení správného typu hned na vstupu bývá často jednodušší.
Zkrátka se lépe pracuje s číslo1=10, číslo2=157, číslo3=0, text1="ResultOK" než s (10 157 0 ResultOK).
Dobrá, pokud je ten řetězec oddělený třeba středníky, dá se to, ale i tak textové parsovací funkce bývají náročnější na CPU a taky hned nemusí odhalit chybu, napíšeš parser špatně, z (10 157 0 ResultOK) ti vypadne jedno číslo (10 0 ResultOK) a najednou řešíš problém.
Jak říkám, pokud to jde šikovně pořešit hned na vstupu, můžeš si tím dost pomoc.
-
Jak databaze notifikuje o tom, ze do ni pribyl radek?
Jsem snad Google?
http://sourceforge.net/projects/pynetmontool/
-
h4k4: super díky, úplně jsem zapomněl (nenapadlo mě), že bych to mohl přesměrovat do souboru a pythonem jenom ten soubor číst :-[
KapitánRUM: S tou databází je to také dobrý nápad, problém je že to potřebuju hoodně "realtimově", to h4k4ovo zatím stačí (ale díky moc za myšlenku - s tou databází to budu potřebovat později)
Co se parsování týče, tak parsovat to budu asi přímo v pythonu, díky za tip, aplikaci co generuje výstup si mohu přepsat, takže to zvážím.
Každý řádek má jako první položku unikátní identifikátor, takže notifikace snad ani nebudu potřebovat, pojedu stále dokola dokud se tam neobjeví další řádek. :)
Díky moc všem
-
Hadani o "...ovnu" je na "...ovno" - jde vzdycky jen o myslenku.
Tak snad ... ;o)
A tusil jsem, ze to pujde monitorovat i z databaze jeneze seee man seeee:
file -> databaze -> soft
or
file -> soft
A - nemusis to mistre presmerovavat do dalsiho fajlu protoze si to cele muzes zpracovat v pythonu.
Tim monitoringem filu.
;o)
Pe4ce
-
malo by fungovat aj
ssh server "nejaky prikaz" | skript.py
-
malo by fungovat aj
ssh server "nejaky prikaz" | skript.py
Přimlouvám se taky za tohle řešení - keep it simple and stupid! :)
Ale tohle nebude fungovat v případě, že by ten skript měl jet dlouhodobě - když se spojení ztratí, získáš nedefinovaný stav a není jak navázat.