mercoledì 31 dicembre 2014

Clear per Python [Brevi Esercizi]

Salve!

Oggi parliamo del comando clear, della sua funzione, ma non in Bash, in Python.

La funzione di clear è quella di pulire la finestra del terminale. In Python non esiste, ecco.

Bisogna importare un modulo, os, per poterla avere. Il problema si pone soprattutto all'interno degli script, sopratutto in presenza di cicli iterativi infiniti, chissà se si può dire così.. ma a me piace questa definizione, perciò non la cambio.

Dicevo che il problema si pone soprattutto all'interno di uno script, se invece lanciamo comandi in una shell python e vogliamo pulire la finestra del terminale, basta la combinazione di tasti Ctrl+L, che funziona anche in bash. Pare non funzioni su Windows, ma il problema non mi tange mica, uso solo linux, e da svariati anni.

Facciamo un esempio concreto. Costruiamo un semplice script che ci aggiorni dell'ora ogni secondo.
#!/usr/bin/python
# -*- coding: utf-8 -*-

import time
while True:
   print time.strftime("%H:%M:%S", time.localtime(time.time()));
   time.sleep(1);
Capirete subito, una volta eseguito lo script, che il comando clear diventa necessario.


Per aggiungerlo, basta importare il modulo os e costruire una funzione. Almeno io faccio così.

Fatte le dovute aggiunte, avremo il seguente codice:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import time, os

def clearScreen():
 os.system("clear")

while True:
   print time.strftime("%H:%M:%S", time.localtime(time.time()));
   time.sleep(1);
   clearScreen()
In questo modo non vedremo più l'elenco interminabile delle ore, dei minuti e dei secondi.


Alla prossima e buon anno!

3 commenti:

  1. Ottimo.
    Una domanda: perché non ti piace "indefiniti" per i cicli che sono tali?
    Un'osservazione per i windoziani: esiste cls che fa come clear.

    RispondiElimina
    Risposte
    1. In effetti l'aggettivo "indefiniti" ha il suo fascino... dai, scherzo! :)) Buon Anno, Juhan!

      Elimina
  2. Ripensandoci: compito a casa: differenze tra clear e Ctrl-J.

    RispondiElimina