Sys.stdout.flush() – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Sys.stdout.flush() – Python – Fórum – Programujte.comSys.stdout.flush() – Python – Fórum – Programujte.com

 

Tom@sQo0
Stálý člen
22. 6. 2008   #1
-
0
-

ahoj,
momentalne mam absolutny miz-maz v tom, ze ako sa vypisuje text:(
aky je rozdiel medzi sys.stdout.write() a print()?
naco sa pouziva sys.stdout.flush() nechapem absolutne naco je...:(

aky je vobec rozdiel medzi pracou so suborom a standardnym vstupom?
a preco funguje kod:



f = open("hello.txt")
try:
for line in f:
print line
finally:
f.close()


? ved open(nieco) otvara subor a vracia object! nie nejake pole, ktore sa da prejst for-om...

ospravedlnujem sa, ze mozno su to velmi primitivne otazky, ale od googlu velmi mudrejsi niesom:(

Nahlásit jako SPAM
IP: 88.212.21.–
Tom@sQo
Tom@sQo0
Stálý člen
22. 6. 2008   #2
-
0
-

ahoj,
a este doplnim, ze by ma zaujimalo vysvetlenie na kode:



sys.stdout.write("abc\r")
#sys.stdout.flush()
time.sleep(3)
sys.stdout.write("efg \r")
#sys.stdout.flush()
time.sleep(5)

preco ked odkomentujem tie 2 riadky, tak sa mi vypise "abc\r" (flush to zrejme aj vypise[preco vobec potrebujem flush na vypisanie?])
potom to prepise za "efg\r" -> a po 5 sekndach mi zmaze cely text(preco ho zmaze?)

a ked su tieto riadky zakomentovane, tak nevypise nic...

Nahlásit jako SPAM
IP: 88.212.21.–
Tom@sQo
Quiark0
Věrný člen
22. 6. 2008   #3
-
0
-

1. sys.stdout je otevřené zařízení standardního výstupu. print prostě jen píše text na standardní výstup. print je tam proto, aby člověk nemusel furt zdlouhavě psát sys.stdout.write(...). Taky možná dělá nějaké extra formátování (třeba když se použije čárka).
2. Voláním metody flush() říkáš tomu objektu, aby všechny svoje dočasné buffery hnedka zapsal na výstup (do souboru nebo na obrazovku). Jinak se to zapíše až bude buffer plný. Buffery se používají proto, že psát do souboru jeden bajt za druhým by bylo strašně pomalé, rychlejší je ukládat si ty bajty do paměti a až jich bude 1kB, uložit je do souboru najednou.
3. Soubor a standardní vstup jsou sice dvě různá zařízení, ale pracuje se s nimi stejně. Je to tak pro programátora snažší.
4. Ten kód funguje proto, že objekt souboru podporuje iteraci. Jinými slovy implementuje metody, které jsou potřeba pro procházení pomocí for. Díky tomu se dají takto snadno použít. Poučení: nejen seznamy se dají procházet pomocí for.
5. Když jsou ty řádky zakomentované, nic se nevypíše, protože se ještě nenaplnil buffer. Proč se to přepisuje netuším.
6. Dost z tohoto je napsáno v dokumentaci!

Nahlásit jako SPAM
IP: 194.212.43.–
Tom@sQo0
Stálý člen
22. 6. 2008   #4
-
0
-

1-4,6: dakujem pekne za vysvetlenie, hladal som to na internete a hoci je to urcite napisane niekde v dokumentacii, nie je to napisane na takom mieste, kde by mi to pomohlo a dalo rychlo najst :(

5: to, preco sa to prepisuje zasa viem ja, lebo je tam "\r", cize sa to vracia na zaciatok riadku a pise odznovu,
ale este by ma zaujiamlo k tomu: kedze nie je buffer neplneny(nedosiahol 1kB), tak sa nevypise? to nemoze byt v niektorych programoch troksu na skodu, ze maju vystup mensi, ako ten 1 kB, takze hoci skoncia, nenaplnil sa buffer, nevypise sa nic?
to je ale zasa v rozpore s tym, co som ja videl, lebo niektore programy napr. "sudo" vypisu urcite menej, nez 1 kB(3 riadky pouzitia) ...

Nahlásit jako SPAM
IP: 88.212.21.–
Tom@sQo
Quiark0
Věrný člen
22. 6. 2008   #5
-
0
-

5. od toho je tam ten flush. Když aplikace zavírá soubor, zavolá to, aby se to dopsalo. Podobně s výstupem na konzoli.

Jo a ten 1kB neber doslova, velikost toho bufferu bude asi jiná. Jde o princip.

Nahlásit jako SPAM
IP: 194.212.43.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý