abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
22.11. 22:30 | Zajímavý projekt
Steve Chamberlin představil (YouTube) svůj malý počítač s Linuxem, jenž pojmenoval 68 Katy. Jádrem počítače postaveného na nepájivém poli (breadboard) je procesor Motorola 68008. [Slashdot]
Ladislav Hagara | Komentářů: 6
21.11. 08:57 | Zajímavý článek
Na titulnej stránke slashdotu dnes nájdete aj správičku o Vojtěchovi Pavlíkovi. Patrí mu uznanie za vedúcu rolu v SUSE Labs a projekty, ako sú kGraft (patchovanie jadra za behu) a bootovanie počítačov zamknutých pomocou secure boot. Pôvodný článok o Vojtěchovi Pavlíkovi nájdete na IT Wire. Gratulujeme.
rastos | Komentářů: 21
20.11. 10:54 | Komunita
Počínaje prosincem bude v některých zemích provedena změna na pozici výchozího vyhledávače ve Firefoxu. V USA bude nově výchozím vyhledávačem Yahoo a v rámci nové pětileté dohody bude podporovat technologii Do Not Track. V Rusku se stane výchozím vyhledávačem Yandex. V Číně bude jako výchozí pokračovat Baidu. Ostatní vyhledávače jako Google či Bing budou v nabídce i nadále. Mozilla mění strategii. Místo jedné globální smlouvy na výchozí … více »
Ladislav Hagara | Komentářů: 23
19.11. 19:34 | Zajímavý projekt
Společnost Jolla spustila na Indiegogo kampaň na podporu svého tabletu. Cílová částka 380 tisíc dolarů byla vybrána za něco málo přes 2 hodiny. V době zveřejnění zprávičky bylo vybráno přes 700 tisíc dolarů. Jolla Tablet s operačním systémem Sailfish OS 2.0, displejem o velikosti 7,85 palce a rozlišení 2048x1536, lze aktuálně koupit za 204 dolarů. Předpokládaná cena po kampani je 249 dolarů.
Ladislav Hagara | Komentářů: 55
19.11. 12:33 | Zajímavý článek
Debian zveřejnil výsledky hlasování o způsobu integrace init systémů v Debianu. V hlasování zvítězila možnost označovaná jako "General Resolution is not required".… více »
Ondřej Surý | Komentářů: 164
19.11. 10:22 | Zajímavý článek
WhatsApp, proprietární aplikace rychlých zpráv pro chytré telefony, která má více než 70 milionů aktivních uživatelů (z celkového počtu 700 milionů registrovaných), zavedla silné šifrování end-to-end. Vyvinul a nasadil je pro ni Moxie Marlinspike, známý bezpečnostní expert a aktivista, který stojí za TextSecure a WhisperPush (implementací TextSecure protokolu v CyanogenModu). Jedná se o implementaci Axolotl Ratchet (vylepšené OTR).
xm | Komentářů: 20
19.11. 04:04 | Zajímavý projekt
Electronic Frontier Foundation (EFF), Mozilla, Cisco, Akamai, IdenTrust a University of Michigan představují projekt Let’s Encrypt. Jedná se o projekt otevřené certifikační autority, jež bude od léta 2015 nabízet certifikáty pro servery rychle, bezpečně, transparentně a zadarmo. Pro správu certifikátů a automatické nastavování serverů je vyvíjen klientský software. Videoukázka na YouTube. Technické detaily na stránkách projektu. Popis použitého protokolu ACME (Automated Certificate Management Environment) na GitHubu. [Slashdot]
Ladislav Hagara | Komentářů: 48
19.11. 01:01 | Zajímavý článek
Bylo uvolněno první číslo časopisu Linux Voice z letošního dubna. K dispozici je jak jedno velké PDF o 116 stranách (61 MB), tak PDF nebo HTML verze jednotlivých článků. K některým z článků je k dispozici také jejich audio verze (OGG, MP3). Linux Voice je anglicky psaný "papírový" časopis. Po úspěšné kampani na Indiegogo bylo vydáno již 9 čísel. Jedno číslo vyjde na cca 330,- Kč, roční předplatné na cca 3000,- Kč. Polovina zisku časopisu se vrací komunitě. Jednotlivá čísla časopisu jsou po 9 měsících od vydání uvolněna pod licencí CC-BY-SA.
Ladislav Hagara | Komentářů: 0
18.11. 17:19 | Pozvánky
Spolek OpenAlt zve na 110. sraz příznivců open source, který proběhne v pátek 21. listopadu od 18:00 v Brně U Bílého beránka (Štefánikova 85/16) a v Praze v restauraci Lokalblok (Náměstí 14. října 10, Praha 5).
Ladislav Hagara | Komentářů: 0
17.11. 18:19 | Nasazení Linuxu
Byl aktualizován seznam 500 nejrychlejších superpočítačů na světě TOP500. Pořadí na prvních devíti místech se od června nezměnilo. Nejrychlejším superpočítačem na světě je již počtvrté čínský Tianhe-2 (MilkyWay-2). Počet superpočítačů v TOP500 bežících na Linuxu zůstal 485. Další přehledy a statistiky na stránkách projektu.
Ladislav Hagara | Komentářů: 4
Disketu jsem naposledy použil během
 (46%)
 (3%)
 (11%)
 (38%)
 (2%)
Celkem 1129 hlasů
 Komentářů: 39, poslední včera 15:25
Rozcestník
Reklama
Autoškola testy online Levný benzín

Dotaz: Python, prijem dat ze stdin

12.2.2010 19:41 Rezka Cervena
Python, prijem dat ze stdin
Přečteno: 629×
Zdravim,

pokud mam skript v pythonu, ktery obsahuje jen radek:
sys.argv[1];
Tedy vypise svuj prvni parametr. Jakym zpusobem musim skript upravit, aby fungoval obemi temito moznostmi:
$ ./skript test
test
$ echo test | ./skript
test

Řešení dotazu:


Odpovědi

12.2.2010 21:17 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Tak aby se podíval do sys.argv a pak na standardní vstup. Jsou to dvě naprosto odlišné záležitosti. Víc neporadím, Python jde mimo mě.
Překladač ti nikdy neřekne: "budeme kamarádi"
Pavel Stárek avatar 13.2.2010 09:19 Pavel Stárek | skóre: 42 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Zajímá tě objekt sys.stdin.

Příklad, mějme soubor pokus.py:
#!/bin/env python
import sys
nejakadatazestdin = sys.stdin.readlines()
print nejakadatazestdin
a pro otestovaní:

echo pokus.py | ./pokus.py
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
13.2.2010 16:07 Rezka Cervena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Ja potrebuji ten skript pouzit takto:

$ ./cti_prubeh | grep "udalost1 "| ./mujskript

Kde cti_prubeh je skript, ktery kazdou sekundu vypisuje urcite zpravy, z nich si pres grep filtruji pouze urcite udalosti a mujskript by mel delat to, ze jen vytiskne to co mu posle grep (pozdeji samozrejme bude mit urcitou funkcionalitu, ale toto je zaklad).

S vasim resenim to bohuzel nefunguje (misto cti_prubeh muzete pouzit treba tcpdump nebo jakykoliv jiny program kteri pravidelne neco vypisuje do konsole).

Jakym zpusobem tedy mohu takovy skript udelat v pythonu?
13.2.2010 18:04 l4m4
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Ale funguje. Akorát předchozí příklad ukazuje, jak se načte stdin celý naráz, kdežto ty to chceš po řádcích
for line in sys.stdin:
    dělej něco...
což by ze znalosti, že souborový objekt odpovídající stdin je sys.stdin, mělo jít odvodit...
13.2.2010 20:35 Rezka Cervena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Zkuste si to sam, mejme skript test.sh:
#!/bin/bash

while [ 1 ]; do
echo "Tik"
sleep 1
done 
Nyni chci napsat skript test.py takovy, aby to fungovalo takto:
$ ./test.sh | ./test.py
Tik
Tik
Tik
Tik
^C 
coz s tim vasim resenim nefunguje.
13.2.2010 20:54 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Môžeš vyskúšať
while True:
    print sys.stdin.readline()
(funkcia readline ale na konci reťazca necháva znak \n)
14.2.2010 09:23 Rezka Cervena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Ok, dekuji, toto opravdu funguje, pro odstraneni zbytecneho \n jsem pouzil vypise pres [0:-1]. Narazil jsem vsak na dalsi problem. Ten skript s "Tik" byl jen demonstracni, ve skutenosti to pouzivam takto:

$ sudo tcpdump -A -s 1400 'dst port 80' -i wlan0 | grep GET | ./skript.py

Tedy vypisuji HTTP GET pozadavky, ktere litaji pres wlan0 rozhrani. V tomto pripade se nejedna o periodicke vypise a dany skript nefunguje:/ Vi prosim nekdo proc?

Fuky avatar 14.2.2010 12:50 Fuky | skóre: 51 | blog: 4u
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin

Skript funguje, ale data visí v bufferu a jelikož jich nepřišlo takové množství, aby se buffer vyprázdnil, tak si myslíš, že to nešlape. Nažeň tam víc dat a uvidíš, že to jde. Nejlépe by jsi udělal kdyby jsi přesně popsal co potřebuješ, aby se případně dalo nadhodit vhodnější řešení.

14.2.2010 16:18 Rezka Cervena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
$ sudo tcpdump -A -s 1400 'dst port 80' -i wlan0 | grep GET
Mi vypisuje jednotlive GET pozadavky, ktere chodi pres wlan0. Co radek, to pozadavek. Pozavek se do konzole vypise vzdy ihned pote co dorazi na wlan0 interface.

Ja potrebuji pouze python script, ktery ty retezce (GET pozadavky) bude dostavat na stdin a ihned je vypisovat (pak skript samozrejme upravim, aby i neco s tema retezcema delal).

Tzn, chci dosahnout toho, aby prikazy
$ sudo tcpdump -A -s 1400 'dst port 80' -i wlan0 | grep GET
i
$ sudo tcpdump -A -s 1400 'dst port 80' -i wlan0 | grep GET | ./skript.py
mely stejny vystup.
Fuky avatar 14.2.2010 19:43 Fuky | skóre: 51 | blog: 4u
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin

Šlo mi spíš o nějaké reálné nasazení, možná by Ti totiž místo tcpdump vyhovoval více přímo modul do Pythonu Pcapy (je součástí Lennyho, třeba bude přímo i v Tvé distibuci).

15.2.2010 12:14 Rezka Cervena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
No jde mi o to v realnem case vypisovat do konzole HTTP GET pozadavky a ty rovnou prevadet do url DECODED podoby. pcapy se mi zda pro takovy jednoduchy pozadavek prilis slozity.
14.2.2010 13:39 l4m4
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
tcpdump -l

viz tcpdump(8).
14.2.2010 16:08 Rezka Cervena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Ani s timto mi to nefunguje:/
14.2.2010 18:54 l4m4
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Tak to máš nějaké rozbité. S
import sys
while True:
    print sys.stdin.readline().strip()
musí
tcpdump -l
dělat totéž co
tcpdump -l | ./test.py
Tentokrát i ověřeno.
14.2.2010 19:01 l4m4
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
První tcpdump to -l samozřejmě nepotřebuje, protože výstup jde na terminál, který je řádkově bufferovaný. Ale neškodí tam.
14.2.2010 00:14 azurIt | skóre: 35 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Toto ti logicky nemoze ist, pretoze skript test.py sa spusti az potom, ako sa skript test.sh ukonci. Ten ale bude bezat navzdy.
14.2.2010 19:00 l4m4
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Toto je blud a kdyby to tak opravdu fungovalo, roury by byly dost naprd. To jen tak pro případ, že by tuto diskusi ještě někdo četl...
Fuky avatar 14.2.2010 19:37 Fuky | skóre: 51 | blog: 4u
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Myslím, že došlo k nedorozumnění, AzurItovi šlo spíš o to, že fce readlines() vrátí svůj výsledek teprve po ukončení skriptu (přesněji uzavření jeho stdout), který plní stdin (druhého skriptu pomocí roury), a má v tom samozřejmě pravdu.
14.2.2010 21:10 l4m4
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Pokud to tak myslel, tak to napsal dost nešťastně...

V každém případě mě zklamalo for line in sys.stdin: ..., což mělo být nejčitější a nejpythonovější řešení. Konstrukce sice používá lazy evaluation, jenže souborové objekty kvůli efektivitě provádějí jakěsi vnitřní bufferování, takže člověk ty řádky stejně nedostane po jednom. Nezjistil jsem, jak/zda se dá vypnout.
15.2.2010 12:55 Rezka Cervena
Rozbalit Rozbalit vše Re: Python, prijem dat ze stdin
Tak konecne vyreseno! Viz:
sudo tcpdump -l -A -s 1400 'dst port 80' -i eth0 | grep --line-buffered GET | ./skript.py
Dulezity je parametr -l u tcpdumpu a --line-buffered u grepu. Dekuji vsem za pomoc.

Založit nové vláknoNahoru

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

ISSN 1214-1267   Powered by Hosting 90 Server hosting
© 1999-2013 Argonit s. r. o. Všechna práva vyhrazena.