Portál AbcLinuxu, 12. května 2025 09:01

Dotaz: Curses, podivne chovani

31.8.2011 13:04 xdeber02
Curses, podivne chovani
Přečteno: 162×
Odpovědět | Admin
Zdravim, mam tento kratky skript v pythonu s pouzitim curses:
import curses
import time

screen = curses.initscr()

a = [1,2,3]

def f(a):
    screen.clear()
    screen.refresh()
    for i in a:
        screen.addstr(str(i)+"\n")

f(a)
time.sleep(3)
a.append(4)
a.remove(1)
f(a)

screen.getch()
curses.endwin()
Ocekaval bych, ze skript se po spusteni bude chovat tak, ze vypise pod sebe 1,2,3 pak se 3 vteriny nic dit nebude a pak se 1,2,3 prekresli na 2,3,4. Misto toho se po spusteni 3 vteriny nic nedeje a pak se vypise 2,3,4. Nevite prosim jak docilit ocekavaneho chovani?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.8.2011 14:09 chrono
Rozbalit Rozbalit vše Re: Curses, podivne chovani
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ten program najskôr prekreslí obrazovku a až potom na ňu niečo vypíše a objaví sa to až pri nasledujúcom prekresľovaní (takže to screen.refresh() musí nasledovať až po tom, ako sú zobrazené všetky údaje).
31.8.2011 14:11 xdeber02
Rozbalit Rozbalit vše Re: Curses, podivne chovani
Nejak presne nevim, jak to myslite, muzete uvest zmeny primo do kodu prosim?
31.8.2011 14:23 chrono
Rozbalit Rozbalit vše Re: Curses, podivne chovani
def f(a):
    screen.clear()
    for i in a:
        screen.addstr(str(i)+"\n")
    screen.refresh()
31.8.2011 14:34 xdeber02
Rozbalit Rozbalit vše Re: Curses, podivne chovani
Aha, to me mohlo napadnout, dekuji moc!

Jeste bych se chtel zeptat, zda jde nejakym zpusobem zajistit, aby po ukonceni programu zustal v konzoli posledni vypis, tedy v tomto pripade 2,3,4?
dan.h avatar 31.8.2011 15:59 dan.h | skóre: 8 | blog: K8_blog | okr. Písek, město Čimelice, obec Nerestce
Rozbalit Rozbalit vše Re: Curses, podivne chovani

Ve framebuffer konzoli (N)curses aplikace zanechají výpis, ale v Xtermu a jiných emulátorech terminálu se kompletní výpis (N)curses aplikace smaže. Výpis by asi šel zanechat pomocí printf(), akorát že Python neznám, tak nevím, jestli tam printf()je.

31.8.2011 16:04 xdeber02
Rozbalit Rozbalit vše Re: Curses, podivne chovani
Myslite jako misto te metody addstr() pouzit printf()?
dan.h avatar 31.8.2011 16:09 dan.h | skóre: 8 | blog: K8_blog | okr. Písek, město Čimelice, obec Nerestce
Rozbalit Rozbalit vše Re: Curses, podivne chovani

Spíše dát printf() úplně na konec. Nechat v kódu addstr(), ale na konec ještě přidat printf()

31.8.2011 16:19 xdeber02
Rozbalit Rozbalit vše Re: Curses, podivne chovani
Jakoze uplne na konci programu vypisu data nejenom pomoci addstr(), ale i pomoci printf()?
dan.h avatar 31.8.2011 16:30 dan.h | skóre: 8 | blog: K8_blog | okr. Písek, město Čimelice, obec Nerestce
Rozbalit Rozbalit vše Re: Curses, podivne chovani

Nějak takle:

import curses
import time

screen = curses.initscr()

a = [1,2,3]

def f(a):
    screen.clear()
    for i in a:
        screen.addstr(str(i)+"\n")
    screen.refresh()

f(a)
time.sleep(3)
a.append(4)
a.remove(1)
f(a)

screen.getch()
curses.endwin()

print "%s" % a
Co to poslední udělá nevím, protože nevím, jak moc je v Pythonu možno do outputu nacpat všelijaký bordel jako je to možné v PHP. Předpokládám, že 'a' zůstane v paměti i po uzavření curses.

dan.h avatar 31.8.2011 16:36 dan.h | skóre: 8 | blog: K8_blog | okr. Písek, město Čimelice, obec Nerestce
Rozbalit Rozbalit vše Re: Curses, podivne chovani

teď jsem to otestoval a funguje to, po ukončení programu mi zůstalo:

[root@pc-sempron ~]# vim test.py 
[root@pc-sempron ~]# python test.py 
[2, 3, 4]
[root@pc-sempron ~]#

31.8.2011 16:38 xdeber02
Rozbalit Rozbalit vše Re: Curses, podivne chovani
Ano, tak mohu potvrdit, ze toto funguje, ale presto by me zajimalo, zda neexistuje nejake cistsi reseni, jednoduseknihovne curses nejak rict, aby po skonceni za sebou ten disaply nezametla. Takto podle me funguje vetsina aplikaci pouzivajici curses, napriklad airodump-ng.
dan.h avatar 31.8.2011 16:45 dan.h | skóre: 8 | blog: K8_blog | okr. Písek, město Čimelice, obec Nerestce
Rozbalit Rozbalit vše Re: Curses, podivne chovani

když jsem smazal řádek curses.endwin(), tak to výpis nechalo, ale Xterm mi odmítal odřádkovat a neukazoval co píšu. :-D

31.8.2011 16:47 xdeber02
Rozbalit Rozbalit vše Re: Curses, podivne chovani
Ano, toho jsem si take vsiml, ale to neni zrovna chovani, ktere by mi vyhovovalo:-D

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.