Portál AbcLinuxu, 27. dubna 2024 03:30


Dotaz: Bufferovai vystupu python skriptu

12.6.2009 00:06 Karel Ovesny
Bufferovai vystupu python skriptu
Přečteno: 164×
Odpovědět | Admin

Dobry den, mam skript v pythonu, ktery vypisuje v pravidelnych intervalech urcite informace. Vystup skriptu presmeruji do souboru:

./script > output.txt

Soubor se vsak neaktualizuje hned, ale postupne se bufferuje po 4096 bajtech. Ja potrebuji tuto vlastnost vypnout. Vygooglil jsem si parametr -u. Kdyz spustim skript takto:

 python -u script > output.txt

Tak pak vse funguje jak ma. Jenze takto ten skript nechci spoustet, proto jsem zkusil neco takoveho pridat na zacatek skriptu:

#!/usr/bin/env python -u

Jenze to pri spusteni rika:

/usr/bin/env: python -u: No such file or directory

Jeste jsem zkousel nastavit promennou PYTHONUNBUFFERED, ale take bezuspesne. Vim, ze mohu po kazde stdout operaci volat flush, ale to se mi nezda jako ciste reseni. Muzete mi prosim poradit?

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Fuky avatar 12.6.2009 09:45 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bufferovai vystupu python skriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/usr/bin/python -u
-- RÁMO: psí tábor , ETriatlon: Výuka plavání
12.6.2009 11:11 Karel Ovesny
Rozbalit Rozbalit vše Re: Bufferovai vystupu python skriptu

Dekuji, toto funguje, jenze ruzne distribuce mohou mit interpret umisteny jinde a pak nastane problem s prenositelnosti skriptu.

Fuky avatar 12.6.2009 13:04 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bufferovai vystupu python skriptu

Tuším, že v Linuxových distribucích by to neměl být problém, pokud Ti to vadí, tak použij wrapper. Každopádně /usr/bin/env je sice z balíčku coreutils, ale mimo Linuxový svět Ti zase nic nezaručí, že env opravdu bude na uvedené cestě. Potom se navíc musí ošetřit spouštění správné verze Pythonu a dostupnost modulů, které skript využívá. Takže /usr/bin/env oproti /usr/bin/python si mohou směle podat ruce, protože existují zásadnější problémy.

BTW: Možná Tě bude zajímat diskuze: #!/usr/bin/env python vs. #!/usr/bin/python.

Fuky avatar 12.6.2009 10:24 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bufferovai vystupu python skriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Shebang
#! - Some details about the shebang mechanism on various Unix flavours
-- RÁMO: psí tábor , ETriatlon: Výuka plavání
12.6.2009 11:12 Karel Ovesny
Rozbalit Rozbalit vše Re: Bufferovai vystupu python skriptu

Vycetl jsem z toho dobre, ze na Linuxu to pres env nepujde? Nebo je tam i reseni, ktere jsem prehlidnul?

Fuky avatar 12.6.2009 11:49 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bufferovai vystupu python skriptu
Ano, také si myslím, že to na Linuxu pomocí env nepůjde.
Fuky avatar 12.6.2009 11:56 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bufferovai vystupu python skriptu

Případně existují ještě jiná řešení než je argument -u: Python output buffering:

# reopen stdout file descriptor with write mode
# and 0 as the buffer size (unbuffered)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

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.