zc.monitor ist ein Server, der eine Kommandozeilen-Schnittstelle bietet, um verschiedene Bits an Informationen & nbsp verlangen;. Der Server ist zc.ngi basiert, so dass wir die zc.ngi Test-Infrastruktur verwenden, um es zu demonstrieren.
& Nbsp; >>> import zc.ngi.testing
& Nbsp; >>> import zc.monitor
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
Der Server unterstützt einen erweiterbaren Satz von Befehlen. Es sieht aus, bis Befehle namens zc.monitor.interfaces.IMonitorPlugin "Dienstprogramme", wie von der zope.component Paket definiert.
Um dies zu sehen, werden wir ein Hallo-Plugin zu erstellen:
& Nbsp; >>> def hallo (Anschluss, name = "Welt"):
& Nbsp; ... "" "Sag hallo
& Nbsp; ...
& Nbsp; ... Geben Sie einen Namen ein, wenn Sie die Welt sie nicht.
& Nbsp; ... "" "
& Nbsp; ... connection.write ("! Hallo% s, schön, dich zu treffen n"% name)
und registrieren Sie es:
& Nbsp; >>> zc.monitor.register (Hallo)
Wenn wir ein Befehlsregister, können wir einen Namen angeben. Um dies zu sehen, werden wir hallo erneut registrieren:
& Nbsp; >>> zc.monitor.register (hallo, 'hallo')
Jetzt haben wir die hallo Befehl an den Server geben kann:
& Nbsp; >>> connection.test_input ('hallo n')
& Nbsp; Hallo Welt, nett dich kennen zu lernen!
& Nbsp; -> SCHLIESSEN
Wir können einen Namen übergeben:
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
& Nbsp; >>> connection.test_input ("Hallo Jim n ')
& Nbsp; Hallo Jim, nett dich kennen zu lernen!
& Nbsp; -> SCHLIESSEN
Der Server wird mit ein paar grundlegende Befehle. Lassen Sie uns zu registrieren sie so können wir sehen, was sie tun. Wir werden die Skala stark vereinfacht Registrierung Rechner zu verwenden:
& Nbsp; >>> zc.monitor.register_basics ()
Der erste ist der Befehl help. Geben Hilfe ohne Eingabe, erhält man eine Liste der verfügbaren Befehle:
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
& Nbsp; >>> connection.test_input ("Hilfe n ')
& Nbsp; Unterstützte Befehle:
& Nbsp; hallo - Sagen Sie hallo
& Nbsp; Hilfe - Hilfe zu Serverbefehle erhalten
& Nbsp; hallo - Sagen Sie hallo
& Nbsp; interaktiv - Schalten Sie den interaktiven Modus des Monitors
& Nbsp; beenden - Beenden Sie den Monitor
& Nbsp; -> SCHLIESSEN
Wir können ausführliche Hilfe, indem Sie einen Befehlsnamen zu erhalten:
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
& Nbsp; >>> connection.test_input ("Hilfe Hilfe n ')
& Nbsp; Hilfe für Hilfe:
& Nbsp;
& Nbsp; Holen Sie sich Hilfe zu Serverbefehle
& Nbsp;
& Nbsp; standardmäßig eine Liste von Befehlen und Zusammenfassungen gedruckt. Liefern
& Nbsp; a Befehlsnamen, um detaillierte Dokumentation für einen Befehl zu erhalten.
& Nbsp;
& Nbsp; -> SCHLIESSEN
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
& Nbsp; >>> connection.test_input ("Hilfe hallo n ')
& Nbsp; Hilfe für hallo:
& Nbsp;
& Nbsp; Sag hallo
& Nbsp;
& Nbsp; Geben Sie einen Namen, wenn Sie die Welt sie nicht.
& Nbsp;
& Nbsp; -> SCHLIESSEN
Die interaktive Befehl schaltet den Monitor in den interaktiven Modus. Wie oben gesehen, reagiert der Monitor in der Regel zu einem einzigen Befehl und schließt die Verbindung. In "interaktiven Modus", wird die Verbindung nicht geschlossen, bis der Befehl quit verwendet. Dies kann nützlich sein beim Zugriff auf den Monitor über Telnet für die Diagnostik.
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
& Nbsp; >>> connection.test_input ("interaktive n ')
& Nbsp; Der interaktive Modus auf. Verwenden Sie "quit" So beenden.
& Nbsp; >>> connection.test_input ('helfen interaktive n')
& Nbsp; Hilfe für interaktiv:
& Nbsp;
& Nbsp; Schalten Sie den interaktiven Modus des Monitors
& Nbsp;
& Nbsp; Normalerweise löst der Monitor die Verbindung nach einem einzigen Befehl.
& Nbsp; Mit der Teilnahme am interaktiven Modus, der Monitor wird nicht die Verbindung zu beenden
& Nbsp; bis Sie die "quit" Befehl eingeben.
& Nbsp;
& Nbsp; Im interaktiven Modus wiederholt eine Leerzeile den letzten Befehl.
& Nbsp;
& Nbsp; >>> connection.test_input ('helfen, das n')
& Nbsp; Hilfe für beendet:
& Nbsp;
& Nbsp; Beenden Sie den Monitor
& Nbsp;
& Nbsp; Das ist im interaktiven Modus nur dann wirklich sinnvoll (siehe "interaktiv"
& Nbsp; Befehl).
& Nbsp;
Beachten Sie, dass das Ergebnis der Befehle nicht mit Ende "-> CLOSE", die eine geschlossene Verbindung angegeben hätte.
Beachten Sie auch, dass die interaktiven Modus können Sie Befehle wiederholen.
& Nbsp; >>> connection.test_input ("Hallo n ')
& Nbsp; Hallo Welt, nett dich kennen zu lernen!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Hallo Welt, nett dich kennen zu lernen!
& Nbsp; >>> connection.test_input ("Hallo Jim n ')
& Nbsp; Hallo Jim, nett dich kennen zu lernen!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Hallo Jim, nett dich kennen zu lernen!
Jetzt werden wir verwenden, zu beenden, um die Verbindung zu schließen.
& Nbsp; >>> connection.test_input ('beenden n')
& Nbsp; Auf Wiedersehen.
& Nbsp; -> SCHLIESSEN
Schließlich ist es erwähnenswert, dass Ausnahmen wird eine Rückverfolgung auf der Verbindung zu erzeugen.
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
& Nbsp; >>> connection.test_input ("Hallo Jim 42 n ') # doctest: + ELLIPSIS
& Nbsp; Traceback (jüngste Aufforderung zuletzt):
& Nbsp; ...
& Nbsp; Typeerror: Hallo () nimmt höchstens 2 Argumente (3 angegeben)
& Nbsp;
& Nbsp; -> SCHLIESSEN
Befehlsschleifen
Mit dem "MORE" Modus können Befehle zu signalisieren, dass sie wollen, um alle zukünftigen Benutzereingaben verlangen. Wir werden ein dummes Beispiel, um zu zeigen, wie es funktioniert zu implementieren.
Hier ist ein Befehl, der einen Rechner implementiert.
& Nbsp; "." >>> PROMPT =
& Nbsp; >>> def calc (Anschluss, * args):
& Nbsp; ... wenn args und args [0] == 'quit':
& Nbsp; ... zurück zc.monitor.QUIT_MARKER
& Nbsp; ...
& Nbsp; ... wenn args:
& Nbsp; ... connection.write (. Str (eval ('' verbinden (args))))
& Nbsp; ... connection.write (' n')
& Nbsp; ...
& Nbsp; ... connection.write (PROMPT)
& Nbsp; ... zurück zc.monitor.MORE_MARKER
Wenn wir diesen Befehl registrieren Sie sich ...
& Nbsp; >>> zc.monitor.register (ber)
... Wir können es aufrufen und wir eine Eingabeaufforderung zu erhalten.
& Nbsp; >>> Anschluss = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (Verbindung)
& Nbsp; >>> connection.test_input ("ber n ')
& Nbsp ;.
Wenn wir es dann mehr Input bekommen wir das Ergebnis plus weitere Aufforderung.
& Nbsp; >>> connection.test_input ("2 + 2 n ')
& Nbsp; 4
& Nbsp ;.
& Nbsp; >>> connection.test_input ('4 * 2 n')
& Nbsp; 8
& Nbsp ;.
Wenn wir fertig sind können wir den Taschenrechner zu sagen, lassen Sie uns gehen.
& Nbsp; >>> connection.test_input ('beenden n')
& Nbsp; -> SCHLIESSEN
Server starten
& Nbsp; >>> import Zeit
& Nbsp; >>> import zope.testing.loggingsupport, Protokollierung
& Nbsp; >>> LogHandler = zope.testing.loggingsupport.InstalledHandler (
& Nbsp; ... Keine, level = logging.INFO)
& Nbsp; >>> zc.monitor.start (9644)
& Nbsp; ('', 9644)
& Nbsp; >>> print LogHandler
& Nbsp; zc.ngi.async.server INFO
& Nbsp; hört auf ('', 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; >>> print LogHandler
& Nbsp; zc.ngi.async.server INFO
& Nbsp; hört auf ("127.0.0.1", 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0.1)
Binden an Port 0:
& Nbsp; >>> addr = zc.monitor.start (0)
& Nbsp; >>> Adr == zc.monitor.last_listener.address
& Nbsp; Wahr
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0.1)
Der Versuch, mit einem Port in Gebrauch binden:
& 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; Falsch
& Nbsp; >>> print LogHandler
& Nbsp; zc.ngi.async.server INFO
& Nbsp; hört auf ("127.0.0.1", 9644)
& Nbsp; zc.ngi.async.server WARNUNG
& Nbsp; nicht auf zu hören ("127.0.0.1", 9644)
& Nbsp; root WARNUNG
& Nbsp; nicht zc.monitor Server zu starten, da die Adresse ("127.0.0.1", 9644) in Betrieb ist.
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0.1)
& Nbsp; >>> loghandler.uninstall ()
Was ist neu in dieser Pressemitteilung:
- Bei der Bindung des Monitors an eine Unix-Domain-Socket, entfernen Sie eine vorhandene Steckdose zur gleichen Pfad, damit die Bindung erfolgreich ist. Dies kann bestehende Nutzungs Bezug beeinflussen zu debuggen Verhalten zopectl, wird aber besser vorhersehbar sein.
Was ist neu in Version 0.3.0:
- Es wurde ein vereinfachtes Registrierungsschnittstelle .
Anforderungen :
- Python
Kommentare nicht gefunden