Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ας πούμε οτι εχουμε το εξής απλό πρόγραμμα

>
from time import sleep

def printHello():
print('hello')

while(True):
printHello()
sleep(20)

 

Αν προσθέσουμε όμως την βιβλιοθήκη curses ως εξής, ώστε κάθε εκτύπωση να γινεται πάνω απο την προηγούμενη:

>
from time import sleep
import curses

def printHello():
(y, x) = curses.getsyx()
print('hello')
curses.setsyx(y, x)
curses.doupdate()

curses.initscr()

while(True):
printHello()
sleep(20)

 

Τότε για κάποιο λόγο το 1ο μήνυμα θα τυπωθεί μετά από 20 δευτερόλεπτα και όχι αμέσως. Πέρα από αυτό, το πρόγραμμα δουλεύει σωστά.

Ξέρει κανείς γιατί γινεται αυτό;

Δημοσ.

Δεν είναι αυτό που λες.

 

Είναι λάθος να χρησιμοποιείς print σε ένα πρόγραμμα που χρησιμοποιεί curses. Για να καταλάβεις το λόγο πρέπει να καταλάβεις πώς λειτουργεί το curses (και οι buffers του).

 

Δοκίμασε αυτό:

>from time import sleep
import curses

def printHello(i):
   x = 0
   y = 0
   win.addstr(y, x, 'hello %d' % i)
   win.refresh()

win = curses.initscr()

for i in xrange(50):
   printHello(i)
   sleep(0.1)

curses.endwin()

Δημοσ.

Κατάλαβα. Με λίγα λογια η print δεν ειναι βεβαιο οτι θα λειτουργήσει οπως πρεπει οταν εχουμε curses.

 

Πως γινεται να μπορώ να έχω είσοδο μετα το initscr? Εχω παρατηρίσει οτι αφού συμβεί αυτό το πρόγραμμα δεν δεχετε ούτε καν Ctrl+C. Αυτο δεν με ενοχλεί τόσο στο πρόγραμμα που εχω κανει, αλλά θα θελα να ξερω τι παιζει.

Δημοσ.

Υπάρχει η window.getch για να διαβάζεις από το πληκτρολόγιο. Όσον αφορά το Ctrl+C πρέπει να δεις τις μεθόδους curses.raw και curses.cbreak.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...