zc.monitor jest serwer, który udostępnia interfejs wiersza poleceń do żądania różnych bitów informacji. & Nbsp; serwer jest zc.ngi na podstawie, dzięki czemu możemy korzystać z infrastruktury testowania zc.ngi aby ją udowodnić.
& Nbsp; >>> import zc.ngi.testing
& Nbsp; >>> import zc.monitor
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
Serwer obsługuje rozszerzalny zestaw poleceń. Wygląda się polecenia jako nazwane zc.monitor.interfaces.IMonitorPlugin "komunalnej", jak określono w pakiecie zope.component.
Aby to zobaczyć, stworzymy plugin komentarzy:
& Nbsp; >>> def komentarzy (połączenie, nazwa = "świecie"):
& Nbsp; ... "" "Pozdrów
& Nbsp; ...
& Nbsp; ... Podaj nazwę, jeśli nie jesteś na świecie.
& Nbsp; ... "" "
& Nbsp; ... connection.write ("Witam% s, miło cię poznać n"% name)
i zarejestrować go:
& Nbsp; >>> zc.monitor.register (cześć)
Kiedy zarejestrować polecenia, możemy podać nazwę. Aby to zobaczyć, będziemy rejestrować witam ponownie:
& Nbsp; >>> zc.monitor.register (cześć, "Hi")
Teraz możemy wydać polecenie komentarzy do serwera:
& Nbsp; >>> connection.test_input ("hi n ')
& Nbsp; Hi świata, miło cię poznać!
& Nbsp; -> ZAMKNIJ
Możemy podać nazwę:
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
& Nbsp; >>> connection.test_input ('hello Jim n')
& Nbsp; Cześć Jim, miło cię poznać!
& Nbsp; -> ZAMKNIJ
Serwer wyposażony jest w kilku podstawowych komend. Załóżmy, zarejestruj je, abyśmy mogli zobaczyć, co robią. Użyjemy simplfied interfejs rejestracji:
& Nbsp; >>> zc.monitor.register_basics ()
Pierwszym jest polecenie help. Udzielanie pomocy bez wejścia, podaje listę dostępnych poleceń:
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
& Nbsp; >>> connection.test_input ("help n ')
& nbsp; Obsługiwane komendy:
& Nbsp; hello - Przywitaj
& Nbsp; pomoc - Uzyskaj pomoc na temat polecenia serwera
& Nbsp; hi - Przywitaj
& Nbsp; interaktywne - Włącz tryb interaktywny monitora
& Nbsp; quit - Wyjście monitora
& Nbsp; -> ZAMKNIJ
Możemy uzyskać szczegółową pomoc podając nazwę polecenia:
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
& Nbsp; >>> connection.test_input ("help n ')
& Nbsp; Pomoc o pomoc:
& Nbsp;
& Nbsp; Uzyskaj pomoc na temat polecenia serwera
& Nbsp;
& Nbsp; Domyślnie lista poleceń i podsumowań zostanie wydrukowany. Zapewniać
& Nbsp; nazwa polecenia, aby uzyskać szczegółową dokumentację dla komendy.
& Nbsp;
& Nbsp; -> ZAMKNIJ
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
& Nbsp; >>> connection.test_input ("help witam n ')
& Nbsp; Pomoc dla komentarzy:
& Nbsp;
& Nbsp; Pozdrów
& Nbsp;
& Nbsp; Podaj nazwę, jeśli nie jesteś na świecie.
& Nbsp;
& Nbsp; -> ZAMKNIJ
Komenda interaktywne przełącza monitor w tryb interaktywny. Jak widać powyżej, monitor zwykle odpowiada na jednego polecenia, a następnie zamyka połączenie. W trybie "interaktywnej", połączenie nie jest zamknięty, dopóki służy zakończyć polecenie. Może to być przydatne podczas korzystania z monitora przez telnet do diagnostyki.
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
& Nbsp; >>> connection.test_input ("interaktywne n ')
& Nbsp; Tryb interaktywny na. Użyj "quit", aby wyjść.
& Nbsp; >>> connection.test_input (' n interaktywną pomóc ")
& Nbsp; Pomoc dla interaktywnych:
& Nbsp;
& Nbsp; Włącz tryb interaktywny monitora
& Nbsp;
& Nbsp; Normalnie, monitor zwalnia połączenie po jednym poleceniem.
& Nbsp; Wprowadzając tryb interaktywny, monitor nie zakończyć połączenie
& Nbsp; do czasu wprowadzenia komendy "quit".
& Nbsp;
& Nbsp; W trybie interaktywnym, pusta linia powtarza ostatnią komendę.
& Nbsp;
& Nbsp; >>> connection.test_input (' n pomóc rzucić ")
& Nbsp; Pomoc dla wyjść:
& Nbsp;
& Nbsp; Wyjście monitora
& Nbsp;
& Nbsp; to jest tylko naprawdę użyteczne w trybie interaktywnym (patrz "interaktywne"
& Nbsp; polecenie).
& Nbsp;
Zauważ, że wynik poleceń nie kończy "-> Zamknij", który byłby wskazany zamkniętą połączenia.
Zauważ też, że tryb interaktywny pozwala na powtarzanie poleceń.
& Nbsp; >>> connection.test_input ('hello n')
& Nbsp; Hi świata, miło cię poznać!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Hi świata, miło cię poznać!
& Nbsp; >>> connection.test_input ('hello Jim n')
& Nbsp; Cześć Jim, miło cię poznać!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Cześć Jim, miło cię poznać!
Teraz użyjemy zamknij, aby zakończyć połączenie.
& Nbsp; >>> connection.test_input ("rzucić n")
& Nbsp; Do widzenia.
& Nbsp; -> ZAMKNIJ
Wreszcie, warto zauważyć, że wyjątki wygeneruje traceback na połączenie.
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
& Nbsp; >>> connection.test_input ('hello Jim 42 n') # doctest: + wielokropka
& Nbsp; Traceback (najnowsze połączenie ostatni):
& Nbsp; ...
& Nbsp; Błąd typu: hello () trwa co (biorąc pod uwagę 3) większość dwa argumenty
& Nbsp;
& Nbsp; -> ZAMKNIJ
Pętle poleceń
Korzystanie z trybu "Więcej", komendy mogą sygnalizować, że chcą ubiegać wszystkie przyszłe dane wprowadzone przez użytkownika. Będziemy realizacji głupi przykład pokazuje jak to działa.
Oto polecenia, które realizuje kalkulatora.
& Nbsp; ". '>>> SZYBKA =
& Nbsp; >>> def calc (połączeń, * args):
& Nbsp; ... jeśli args i args [0] == 'zamknąć':
& Nbsp; ... powrót zc.monitor.QUIT_MARKER
& Nbsp; ...
& Nbsp; ... jeśli args:
& Nbsp; ... connection.write (Str. (Eval ('' join (args))))
& Nbsp; ... connection.write (' n')
& Nbsp; ...
& Nbsp; ... connection.write (SZYBKA)
& Nbsp; ... powrót zc.monitor.MORE_MARKER
Jeśli rejestrujemy tego polecenia ...
& Nbsp; >>> zc.monitor.register (oblicz)
... Możemy powołać go i mamy wiersz.
& Nbsp; >>> połączenia = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (połączenie)
& Nbsp; >>> connection.test_input ("obl n ')
& Nbsp ;.
Jeśli się dać mu więcej wejście dostajemy wynik plusa kolejny wiersz.
& Nbsp; >>> connection.test_input ("2 + 2 n")
& Nbsp; 4
& Nbsp ;.
& Nbsp; >>> connection.test_input ("4 * 2 n")
& Nbsp; 8
& Nbsp ;.
Gdy skończymy możemy powiedzieć kalkulatora chodźmy.
& Nbsp; >>> connection.test_input ("rzucić n")
& Nbsp; -> ZAMKNIJ
Serwer zacząć
& Nbsp; >>> Czas na przywóz
& Nbsp; >>> import zope.testing.loggingsupport, rejestrowanie
& Nbsp; >>> loghandler = zope.testing.loggingsupport.InstalledHandler (
& Nbsp; ... Brak, poziom = logging.INFO)
& Nbsp; >>> zc.monitor.start (9644)
& Nbsp; ('', 9644)
& Nbsp; >>> print loghandler
& Nbsp; zc.ngi.async.server INFO
& Nbsp; nasłuchuje ('', 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Brak
& 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; nasłuchuje ("127.0.0.1", 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Brak
& Nbsp; >>> time.sleep (0,1)
Wiążą się z portu 0:
& Nbsp; adr = zc.monitor.start >>> (0)
& Nbsp; >>> addr == zc.monitor.last_listener.address
& Nbsp; prawda
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Brak
& Nbsp; >>> time.sleep (0,1)
Próbując ponownie powiązać do portu w użyciu:
& 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; Fałsz
& Nbsp; >>> print loghandler
& Nbsp; zc.ngi.async.server INFO
& Nbsp; nasłuchuje ("127.0.0.1", 9644)
& Nbsp; zc.ngi.async.server OSTRZEŻENIE
& Nbsp; stanie nasłuchiwać ("127.0.0.1", 9644)
& Nbsp; korzeń OSTRZEŻENIE
& Nbsp, nie można uruchomić serwera zc.monitor ponieważ adres ("127.0.0.1 ', 9644) jest w użyciu.
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Brak
& Nbsp; >>> time.sleep (0,1)
& Nbsp; >>> loghandler.uninstall ()
Co nowego w tym wydaniu:
- Podczas wiązania monitor Gniazdo Unix domeny, usunąć istniejące gniazdo w tym samym drogi więc wiążą się powiedzie. Może to mieć wpływ na istniejące zużycie w stosunku do zopectl zachowanie debugowania, ale będzie bardziej przewidywalna.
Co nowego w wersji 0.3.0:
- Dodano uproszczony interfejs rejestracji .
Wymagania :
- Python
Komentarze nie znaleziono