zc.monitor è un server che fornisce un'interfaccia a linea di comando per richiedere vari pezzi di informazioni. & Nbsp; Il server è zc.ngi base, in modo da poter utilizzare l'infrastruttura di test zc.ngi dimostrarlo.
& Nbsp; >>> zc.ngi.testing import
& Nbsp; >>> zc.monitor import
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
Il server supporta un set estensibile di comandi. Guarda su comandi come denominati zc.monitor.interfaces.IMonitorPlugin "utilità", come definito dal pacchetto zope.component.
Per vedere questo, creeremo un plugin ciao:
& Nbsp; >>> def ciao (collegamento, name = 'mondo'):
& Nbsp; ... "" "Dite ciao
& Nbsp; ...
& Nbsp; ... Fornire un nome, se non sei il mondo.
& Nbsp; ... "" "
& Nbsp; ... connection.write ("Ciao% s, piacere di conoscerti ya n" nome%)
e registrarlo:
& Nbsp; >>> zc.monitor.register (ciao)
Quando si registra un comando, siamo in grado di fornire un nome. Per vedere questo, ci registriamo ciao di nuovo:
& Nbsp; >>> zc.monitor.register (ciao, 'hi')
Ora possiamo dare il comando ciao al server:
& Nbsp; >>> connection.test_input ('hi n')
& Nbsp; mondo Ciao, piacere di conoscerti ya!
& Nbsp; -> CHIUDI
Siamo in grado di passare un nome:
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
& Nbsp; >>> connection.test_input ('ciao Jim n')
& Nbsp; Ciao Jim, nice to meet ya!
& Nbsp; -> CHIUDI
Il server viene fornito con alcuni comandi di base. Registriamolo loro in modo che possiamo vedere quello che fanno. Useremo l'interfaccia di registrazione simplfied:
& Nbsp; >>> zc.monitor.register_basics ()
Il primo è il comando help. Dare aiuto senza input, fornisce un elenco di comandi disponibili:
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
& Nbsp; >>> connection.test_input ('help n')
& nbsp; supportati comandi:
& Nbsp; ciao - Dite ciao
& Nbsp; help - Get aiuto su comandi server
& Nbsp; hi - Dite ciao
& Nbsp; interattivo - Attivare la modalità interattiva del monitor
& Nbsp; quit - Esci monitor
& Nbsp; -> CHIUDI
Siamo in grado di ottenere informazioni dettagliate specificando un nome comando:
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
& Nbsp; >>> connection.test_input ('help help n')
& Nbsp; Aiuto aiuto:
& Nbsp;
& Nbsp; Chiedi aiuto sui comandi del server
& Nbsp;
& Nbsp; Per impostazione predefinita, un elenco di comandi e sommari viene stampato. Fornire
& Nbsp; un nome di comando per ottenere documentazione dettagliata per un comando.
& Nbsp;
& Nbsp; -> CHIUDI
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
& Nbsp; >>> connection.test_input ('help ciao n')
& Nbsp; Aiuto per ciao:
& Nbsp;
& Nbsp; Dite ciao
& Nbsp;
& Nbsp; Fornire un nome, se non sei il mondo.
& Nbsp;
& Nbsp; -> CHIUDI
Il comando interattivo commuta il monitor in modalità interattiva. Come visto sopra, il monitor risponde solitamente ad un comando e poi chiude la connessione. In "modalità interattiva", la connessione non viene chiusa finché non viene utilizzato il comando quit. Questo può essere utile quando si accede al monitor tramite telnet per la diagnostica.
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
& Nbsp; >>> connection.test_input (' n interattivo')
& Nbsp; modalità Interattiva su. Utilizzare "quit" Per uscire.
& Nbsp; >>> connection.test_input ('aiuto interattivo n')
& Nbsp; Aiuto per interattiva:
& Nbsp;
& Nbsp; Attivare modalità interattiva del monitor
& Nbsp;
& Nbsp; In genere, il monitor rilascia la connessione dopo un singolo comando.
& Nbsp; Per entrare in modalità interattiva, il monitor non terminare la connessione
& Nbsp; fino a quando si immette il comando "quit".
& Nbsp;
& Nbsp; In modalità interattiva, una riga vuota ripete l'ultimo comando.
& Nbsp;
& Nbsp; >>> connection.test_input ('aiutare quit n')
& Nbsp; Aiuto per uscire:
& Nbsp;
& Nbsp; Chiudere il monitor
& Nbsp;
& Nbsp; Questo è realmente utile solo in modalità interattiva (vedere la sezione "interattivo"
& Nbsp; di comando).
& Nbsp;
Si noti che il risultato dei comandi non si è concluso con "-> CLOSE", che avrebbe indicato una connessione chiusa.
Si noti inoltre che la modalità interattiva consente di ripetere i comandi.
& Nbsp; >>> connection.test_input ('ciao n')
& Nbsp; mondo Ciao, piacere di conoscerti ya!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; mondo Ciao, piacere di conoscerti ya!
& Nbsp; >>> connection.test_input ('ciao Jim n')
& Nbsp; Ciao Jim, nice to meet ya!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Ciao Jim, nice to meet ya!
Ora useremo quit per chiudere la connessione.
& Nbsp; >>> connection.test_input ('quit n')
& Nbsp; Arrivederci.
& Nbsp; -> CHIUDI
Infine, vale la pena notare che le eccezioni genererà un traceback sulla connessione.
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
& Nbsp; >>> connection.test_input ('ciao Jim 42 n') # doctest: + ELLIPSIS
& Nbsp; Traceback (chiamata più recente scorso):
& Nbsp; ...
& Nbsp; TypeError: ciao () richiede al massimo 2 argomenti (3 date)
& Nbsp;
& Nbsp; -> CHIUDI
Loop di comando
Utilizzando la modalità "MORE", i comandi possono segnalare che vogliono rivendicare tutti i futuri input dell'utente. Ci implementare un esempio stupido per dimostrare come funziona.
Ecco un comando che implementa una calcolatrice.
& Nbsp; '.' >>> PROMPT =
& Nbsp; >>> def Calc (connessione, * args):
& Nbsp; ... se args e args [0] == 'smettere':
& Nbsp; ... tornare zc.monitor.QUIT_MARKER
& Nbsp; ...
& Nbsp; ... se args:
& Nbsp; ... connection.write (. Str (eval ('' join (args))))
& Nbsp; ... connection.write (' n')
& Nbsp; ...
& Nbsp; ... connection.write (prompt)
& Nbsp; ... tornare zc.monitor.MORE_MARKER
Se registriamo questo comando ...
& Nbsp; >>> zc.monitor.register (calc)
... Possiamo invocarlo e ottenere un prompt.
& Nbsp; >>> collegamento = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (collegamento)
& Nbsp; >>> connection.test_input ('calc n')
& Nbsp ;.
Se poi diamo più di ingresso si ottiene il risultato più altro prompt.
& Nbsp; >>> connection.test_input ('2 + 2 n')
& Nbsp; 4
& Nbsp ;.
& Nbsp; >>> connection.test_input ('4 * 2 n')
& Nbsp; 8
& Nbsp ;.
Una volta che abbiamo finito possiamo dire la calcolatrice per lasciarci andare.
& Nbsp; >>> connection.test_input ('quit n')
& Nbsp; -> CHIUDI
Avvio del server
Tempo >>> import; & nbsp
& Nbsp; >>> import zope.testing.loggingsupport, logging
& Nbsp; >>> loghandler = zope.testing.loggingsupport.InstalledHandler (
& Nbsp; ... Nessuno, livello = logging.INFO)
& Nbsp; >>> zc.monitor.start (9644)
& Nbsp; ('', 9644)
& Nbsp; >>> loghandler stampa
& Nbsp; zc.ngi.async.server INFO
& Nbsp; in ascolto sulla ('', 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0,1)
& Nbsp; >>> loghandler.clear ()
& Nbsp; >>> zc.monitor.start (('127.0.0.1', 9644))
& Nbsp; ('127.0.0.1', 9644)
& Nbsp; >>> loghandler stampa
& Nbsp; zc.ngi.async.server INFO
& Nbsp; in ascolto sulla ('127.0.0.1', 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0,1)
Associare alla porta 0:
& Nbsp; >>> addr = zc.monitor.start (0)
& Nbsp; >>> addr == zc.monitor.last_listener.address
& Nbsp; La vera
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0,1)
Cercando di ricollegare a una porta in uso:
& Nbsp; >>> loghandler.clear ()
& Nbsp; >>> zc.monitor.start (('127.0.0.1', 9644))
& Nbsp; ('127.0.0.1', 9644)
& Nbsp; >>> zc.monitor.start (('127.0.0.1', 9644))
& Nbsp; False
& Nbsp; >>> loghandler stampa
& Nbsp; zc.ngi.async.server INFO
& Nbsp; in ascolto sulla ('127.0.0.1', 9644)
& Nbsp; zc.ngi.async.server WARNING
& Nbsp; incapace di ascoltare su ('127.0.0.1', 9644)
& Nbsp; radice WARNING
& Nbsp; in grado di avviare il server zc.monitor perché l'indirizzo ('127.0.0.1', 9644), è in uso.
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0,1)
& Nbsp; >>> loghandler.uninstall ()
Cosa c'è di nuovo in questa versione:
- Quando vincolante il monitor ad un Presa dominio Unix, rimuovere una presa esistente nello stesso percorso in modo che il binding è successo. Questo potrebbe influenzare l'utilizzo rispetto all'ultima zopectl comportamento di debug, ma sarà più prevedibile.
Cosa c'è di nuovo nella versione 0.3.0:
- Aggiunta un'interfaccia semplificata di registrazione .
Requisiti :
- Python
I commenti non trovato