Portál AbcLinuxu, 12. května 2025 09:01
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?
def f(a): screen.clear() for i in a: screen.addstr(str(i)+"\n") screen.refresh()
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.
Spíše dát printf()
úplně na konec. Nechat v kódu addstr()
, ale na konec ještě přidat printf()
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" % aCo 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.
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 ~]#
když jsem smazal řádek curses.endwin()
, tak to výpis nechalo, ale Xterm mi odmítal odřádkovat a neukazoval co píšu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.