Quindi sto scrivendo un progetto in cui eseguo un programma che riceve/invia costantemente messaggi ad altri computer che eseguono lo stesso programma.Mantieni stdin line nella parte superiore o inferiore della schermata del terminale
Il destinatario/mittente di dati è in esecuzione su un thread e stampa su stdout. Ottengo cose come questa:
[INFO] User 'blah' wants to send message to you.
[INFO] some other info
[MSG REC] Message 'hello' received from blah.
Ora il problema è che a volte vorrei inserire i comandi nel terminale, il problema è quando provo ad inserire un comando e un nuovo messaggio informazioni o MSG REC
viene stampato su stdout . Ho comandi come quit
e status
ecc.
>> indica la riga di input.
Qualcosa di simile può accadere:
[INFO] User 'blah' wants to send message to you.
[INFO] some other info
[MSG REC] Message 'hello' received from blah.
>> stat[MSG REC] Message 'sup' received from Bob.
us
Poi vorrei premere invio e il comando viene eseguito status
ma sembra così povero nel terminale. Un messaggio appare ogni 2-4 secondi, quindi questo è un problema. C'è un buon modo per risolvere questo? Ho provato a usare i cursori ANSI per provare a inserire una nuova riga prima dell'ultima riga in modo che l'ultima riga rimanga sempre come linea di input e potrei digitare "stat", attendere un po 'e terminarla con "us" senza problemi.
Ho anche visto la gente consigliare curses
ma tentare di integrarlo con il mio programma ha completamente incasinato la formattazione del mio output tra le altre cose (e penso che forse il suo eccessivo).
Quindi non v'è un modo semplice per rendere il filo inserire nuova MSG REC
linee 1 riga sopra l'ultima riga in modo da l'ultima riga sarebbe sempre rimanere come la linea di ingresso con >> e qualsiasi altra cosa che ho digitato.
Utilizzando Python2.7 su Linux.
MODIFICA: modifica apportata a James Mills risposta: Ho dovuto utilizzarlo ogni volta che il mio thread stava stampando una nuova riga.
myY, myX = stdscr.getyx();
str = "blah blah"; #my message I want to print
stdscr.addstr(len(lines), 0, str)
lines.append(str)
stdscr.move(myY, myX) #move cursor back to proper position
Ho dovuto aggiungere 'curses.KEY_BACKSPACE' per correggere i backspaces sul mio computer. Anche questo non funziona come voglio, mentre il mio thread sta stampando nuove linee ogni secondo (l'ho passato 'stdscr' come argomento e reso le linee globali), sposta il cursore alla fine della linea stampata Sto digitando è alla fine dell'ultima riga stampata e non nella parte inferiore vicino a '>>>' – Mohammad
Okay è riuscito a risolverlo e ora funziona come voglio! Ho appena dovuto cambiare il modo in cui il mio thread stava stampando nuove righe, in modo da spostare il cursore nella posizione corretta dopo averlo stampato. Ho aggiunto la modifica al post originale. – Mohammad
Sono contento che questo ti abbia aiutato a risolvere i tuoi problemi! L'uso di '' curses.KEY_BACKSPACE'' non funziona sul mio sistema :) –