Repl

repl

“C’è da fare un piccolo scriptino che gestisca queste operazioni ripetitive e noiose, vuoi?”
Cerrrto, subito!”
Python, Ruby, Octave, lo fanno tutti così:
casi1

e, sì, anche newLISP, Clojure, Hy e altri dela stessa famiglia (ma questo meglio non dirlo che poi mi guardano male):

casi2

E poi dice la Wiki:

A read–eval–print loop (REPL) is a simple, interactive computer programming environment. The term is most usually used to refer to a Lisp interactive environment, but can be applied to command line shells and similar environments for programming languages such as APL, BASIC, Clojure, F#, Factor, Haskell, J, Julia, Perl, PHP, Prolog, Python, R, Ruby, Scala, Smalltalk, Standard ML, Tcl, Javascript, et al.

Quasi-quasi ci provo

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

import sys

def help():
	print '\th\thelp'
	print '\tq\tquit'
	print '\ta\tcommand A'
	print '\tqui viene il resto dell\'help'

def cmdA():
	print 'cmd A'

def cmdB():
	print 'cmd B'

def cmdC():
	print 'cmd C'

#main
curr = -1

while True:
	curr += 1
	prompt = 'repl - {0} > '.format(curr)
	cmd = raw_input(prompt).strip()
	if len(cmd) == 0:
		help()
	if cmd == 'q':
		sys.exit(0)
	elif cmd == 'a':
		cmdA()
	elif cmd == 'b':
		cmdB()
	elif cmd == 'c':
		cmdC()
	elif cmd == 'h':
		help()
	else:
		print '???', cmd, '???'

repl0

Funziona! Facilissimo, estensibile.

Lo script è per la versione 2.x; per la 3.x non è necessaria l’indicazione di usare l’Unicode, raw_input() diventa input() e print è una funzione, quindi gli argomenti vanno tra parentesi.
L’ho scritto in Python per ragioni di standardizzazione ma è immediato codificarlo negli altri linguaggi.

E lo stesso script funziona, senza modifiche, con Windows:

repl0-w

In realtà dipende cosa saranno i comandi veri, ma è una questione secondaria.
OK?

Subito dopo mi sono detto che il prompt a colori sarebbe stato molto più bello. Avevo trattato l’argomento quando il blog era molto giovane, qui.

Ma è passato tanto tempo, chissà se… no, ecco cosa si trova su Stack Overflow.

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

CSI="\x1B["
for c in range(8):
	print "{0}{1}{2}{3}prova di{4}{5} colore {6}".format(
			CSI, "1;", 30 + c, "m",CSI, "0m", 30 + c)
	#         0    1    2       3   4     5    6

rosso = "\x1B[1;31m"
normale = "\x1B[0m"

print "\nper me {0}va bene{1} così.".format(rosso, normale)

tavolacolori

Quindi allo script basta modificare la variabile prompt, così:

prompt = '\x1B[1;31mrepl - {0} >\x1B[0m '.format(curr)

ed ecco il risultato:

repl1

OK?
Sì, bellissimo ma:

  • non funziona con Windows (sarebbe possibile ma è macchinoso, vedi il link a Stack Overflow sopra);
  • hai appena finito il corso su GTK3 con Python, usiamo quello che viene anche più bello.

OK!, prossimamente, il prossimo anno.
Ah, sì, quasi dimenticavo: buone feste! 😛 nèh! 🙄

Posta un commento o usa questo indirizzo per il trackback.

Trackback

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: