Portál AbcLinuxu, 9. listopadu 2025 00:48
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" % 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.
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.