zc.monitor este un server care oferă o interfață linie de comandă pentru a solicita diverse biți de informații. & Nbsp; Serverul este zc.ngi pe baza, astfel încât să putem folosi infrastructura de testare zc.ngi să-l demonstreze.
& Nbsp; >>> zc.ngi.testing import
& Nbsp; >>> zc.monitor import
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
Serverul acceptă o serie extensibila de comenzi. Se pare up comenzi ca numele de zc.monitor.interfaces.IMonitorPlugin "utilități", astfel cum sunt definite prin pachetul zope.component.
Pentru a vedea acest lucru, vom crea un plugin salut:
& Nbsp; >>> def salut (conexiune, name = 'lume'):
& Nbsp; ... "" "Salută-
& Nbsp; ...
& Nbsp; ... Furnizați un nume, dacă nu sunteți din lume.
& Nbsp; ... "" "
& Nbsp; ... connection.write ("! Bună% s, frumos să te întâlnesc n" nume%)
și îl înregistrați:
& Nbsp; >>> zc.monitor.register (salut)
Când ne-am înregistra o comandă, putem oferi un nume. Pentru a vedea acest lucru, vom înregistra salut din nou:
& Nbsp; >>> zc.monitor.register (Bună ziua, "hi")
Acum putem da comanda salut la server:
& Nbsp; >>> connection.test_input ("hi n ')
& Nbsp; Bună lume, frumos să te cunosc!
& Nbsp; -> ÎNCHIS
Putem trece un nume:
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
& Nbsp; >>> connection.test_input ("Bună ziua Jim n ')
& Nbsp; Bună Jim, frumos să te cunosc!
& Nbsp; -> ÎNCHIS
Serverul vine cu câteva comenzi de bază. Să-i înregistrare astfel încât să putem vedea ceea ce fac ei. Vom folosi interfața de înregistrare simplfied:
& Nbsp; >>> zc.monitor.register_basics ()
Primul este comanda de ajutor. Acordarea de ajutor fără de intrare, dă o listă de comenzi disponibile:
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
& Nbsp; >>> connection.test_input ("ajutor n ')
& nbsp; suportate comenzi:
& Nbsp; salut - Say Hello
& Nbsp; de ajutor - Obțineți ajutor despre comenzi de server
& Nbsp; hi - Say Hello
& Nbsp; interactiv - Activarea modului interactiv monitorului
& Nbsp; a iesi - Quit monitor
& Nbsp; -> ÎNCHIS
Putem obține ajutor detaliat prin specificarea un nume de comandă:
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
& Nbsp; >>> connection.test_input ("Ajutor n ')
& Nbsp; Ajutor pentru ajutor:
& Nbsp;
& Nbsp; Asistență despre comenzi de server
& Nbsp;
& Nbsp; În mod implicit, este imprimată o listă de comenzi și rezumate. Furniza
& Nbsp; un nume de comandă pentru a obține documentație referitoare la o comandă.
& Nbsp;
& Nbsp; -> ÎNCHIS
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
& Nbsp; >>> connection.test_input ("help salut n ')
& Nbsp; Ajutor pentru salut:
& Nbsp;
& Nbsp; Salută
& Nbsp;
& Nbsp; Furnizați un nume, dacă nu sunteți din lume.
& Nbsp;
& Nbsp; -> ÎNCHIS
Comanda interactiv trece monitorul în modul interactiv. După cum sa văzut mai sus, monitorul răspunde, de obicei, la o singură comandă și apoi închide conexiunea. În "modul interactiv", conexiunea nu este închis până se folosește comanda quit. Acest lucru poate fi util atunci când accesează monitorul prin telnet pentru diagnosticare.
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
& Nbsp; >>> connection.test_input (" n interactiv")
& Nbsp; modul Interactiv pe. Folosiți "ieși" pentru a ieși.
& Nbsp; >>> connection.test_input ("ajutor interactiv n ')
& Nbsp; Ajutor pentru interactiv:
& Nbsp;
& Nbsp; Activarea modului interactiv monitorului
& Nbsp;
& Nbsp; În mod normal, monitorul eliberează conexiunea după o singură comandă.
& Nbsp; Prin intrarea în modul interactiv, monitorul nu va termina conexiunea
& Nbsp; până când introduceți comanda "ieși".
& Nbsp;
& Nbsp; În modul interactiv, o linie goală repetă ultima comandă.
& Nbsp;
& Nbsp; >>> connection.test_input ("ajutor quit n ')
& Nbsp; Ajutor pentru a iesi:
& Nbsp;
& Nbsp; Quit monitorului
& Nbsp;
& Nbsp; Acest lucru este doar foarte util în modul interactiv (vezi "interactiv"
& Nbsp; comanda).
& Nbsp;
Observați că rezultatul comenzilor nu sa terminat cu "-> Close", care ar fi indicat o conexiune închisă.
De asemenea, observați că modul interactiv vă permite să repete comenzi.
& Nbsp; >>> connection.test_input ("Bună ziua n ')
& Nbsp; Bună lume, frumos să te cunosc!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Bună lume, frumos să te cunosc!
& Nbsp; >>> connection.test_input ("Bună ziua Jim n ')
& Nbsp; Bună Jim, frumos să te cunosc!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Bună Jim, frumos să te cunosc!
Acum vom folosi renuntat pentru a închide conexiunea.
& Nbsp; >>> connection.test_input ("quit n ')
& Nbsp; revedere.
& Nbsp; -> ÎNCHIS
În cele din urmă, este de remarcat faptul că excepțiile va genera o traceback pe conexiunea.
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
& Nbsp; >>> connection.test_input ("Bună ziua Jim 42 n ') # doctest: + elipsă
& Nbsp; Traceback (apel cele mai recente Ultima):
& Nbsp; ...
& Nbsp; TypeError: salut () are cel mult 2 argumente (3 dat)
& Nbsp;
& Nbsp; -> ÎNCHIS
Bucle de comandă
Utilizarea modului "mai mult", comenzi pot semnala că doresc să solicite toate de intrare viitor utilizator. Vom pune în aplicare o prostie exemplu pentru a demonstra cum funcționează.
Iată o comandă care pune în aplicare un calculator.
& Nbsp; ". '>>> PROMPT =
& Nbsp; >>> def calc (conectare, * args):
& Nbsp; ... dacă args si args [0] == 'quit':
& Nbsp; ... întoarce zc.monitor.QUIT_MARKER
& Nbsp; ...
& Nbsp; ... dacă args:
& Nbsp; ... connection.write (str. (Eval ('' alătura (args))))
& Nbsp; ... connection.write (' n')
& Nbsp; ...
& Nbsp; ... connection.write (PROMPT)
& Nbsp; ... întoarce zc.monitor.MORE_MARKER
Dacă înregistrați această comandă ...
& Nbsp; >>> zc.monitor.register (calculat)
... Putem invoca si ajungem un prompt.
& Nbsp; >>> conexiune = zc.ngi.testing.TextConnection ()
& Nbsp; >>> serverul = zc.monitor.Server (conexiune)
& Nbsp; >>> connection.test_input ("calculat n ')
& Nbsp ;.
Dacă atunci vom da mai intrare vom obține rezultatul, plus un alt prompt.
& Nbsp; >>> connection.test_input ("2 + 2 n ')
& Nbsp; 4
& Nbsp ;.
& Nbsp; >>> connection.test_input ("* 2 n 4 ')
& Nbsp; 8
& Nbsp ;.
După ce am terminat, putem spune acest calculator să ne lase să mergem.
& Nbsp; >>> connection.test_input ("quit n ')
& Nbsp; -> ÎNCHIS
Start Server
& Nbsp; >>> timp import
& Nbsp; >>> zope.testing.loggingsupport import, exploatare forestieră
& Nbsp; >>> loghandler = zope.testing.loggingsupport.InstalledHandler (
& Nbsp; ... Nici una, nivel = logging.INFO)
& Nbsp; >>> zc.monitor.start (9644)
& Nbsp; ('', 9644)
& Nbsp; >>> loghandler imprimare
& Nbsp; INFO zc.ngi.async.server
& Nbsp; de ascultare pe ('', 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Nici unul
& 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 imprimare
& Nbsp; INFO zc.ngi.async.server
& Nbsp; de ascultare pe ("127.0.0.1", 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Nici unul
& Nbsp; >>> time.sleep (0,1)
Legați la portul 0:
& Nbsp; >>> adr = zc.monitor.start (0)
& Nbsp; >>> adr == zc.monitor.last_listener.address
& Nbsp; Adevărat
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Nici unul
& Nbsp; >>> time.sleep (0,1)
Încercarea de a rebind la un port în utilizare:
& 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; Fals
& Nbsp; >>> loghandler imprimare
& Nbsp; INFO zc.ngi.async.server
& Nbsp; de ascultare pe ("127.0.0.1", 9644)
& Nbsp; zc.ngi.async.server ATENȚIONARE
& Nbsp; în imposibilitatea de a asculta pe ("127.0.0.1", 9644)
& Nbsp; rădăcină ATENȚIONARE
& Nbsp; în imposibilitatea de a porni serverul zc.monitor deoarece adresa ("127.0.0.1", 9644), este în uz.
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Nici unul
& Nbsp; >>> time.sleep (0,1)
& Nbsp; >>> loghandler.uninstall ()
Ce este nou în această versiune:
- Când obligatoriu monitorul la o soclu Unix domeniu, elimina o priză existentă în aceeași cale, astfel încât legarea este de succes. Acest lucru poate afecta utilizarea existente cu privire la zopectl comportament depanare, dar va fi mult mai previzibile.
Ce este nou în versiunea 0.3.0:
- Adaugata o interfață simplificată de înregistrare .
Cerințe :
- Python
Comentariile nu a fost găsit