zc.monitor ay isang server na nagbibigay ng isang command-line interface upang humiling ng iba't-ibang mga piraso ng impormasyon. & Nbsp; Ang server ay zc.ngi batay, upang maaari naming gamitin ang mga imprastraktura sa pagsubok zc.ngi upang ipakita ito.
& Nbsp; >>> import zc.ngi.testing
& Nbsp; >>> import zc.monitor
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
Sinusuportahan ang server ng isang extensible hanay ng mga command. Tila up utos bilang pinangalanang zc.monitor.interfaces.IMonitorPlugin "utilities", tulad ng natukoy ng zope.component package.
Upang makita ito, lilikha kami ng isang halo plugin:
& Nbsp; >>> def halo (na koneksyon, pangalan = 'mundo'):
& Nbsp; ... "" "Sabihin halo
& Nbsp; ...
& Nbsp; ... Magbigay ng isang pangalan kung hindi ikaw ang mundo.
& Nbsp; ... "" "
& Nbsp; ... connection.write ("! Hi% s, mabait sa matugunan Ya n"% pangalan)
at iparehistro ito:
& Nbsp; >>> zc.monitor.register (halo)
Kapag magparehistro namin ang isang command, maaari kaming magbigay ng pangalan. Upang makita ito, aming magparehistro kumusta muli:
& Nbsp; >>> zc.monitor.register (kumusta, 'hi')
Ngayon ay maaari naming bigyan ang halo utos sa server:
& Nbsp; >>> connection.test_input ('hi n')
& Nbsp; Hi mundo, mabait sa matugunan Ya!
& Nbsp; -> ISARA
Maaari naming magbigay ng pangalan:
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
& Nbsp; >>> connection.test_input ('kumusta Jim n')
& Nbsp; Hi Jim, mabait sa matugunan Ya!
& Nbsp; -> ISARA
Ang server ay may ilang mga pangunahing utos. Magrehistro ng mga ito upang maaari naming makita kung ano ang kanilang ginagawa Hayaan. Gagamitin namin ang simplfied pagpaparehistro ng interface:
& Nbsp; >>> zc.monitor.register_basics ()
Ang una ay ang command ng tulong. Ang pagbibigay ng tulong nang walang input, nagbibigay ng isang listahan ng magagamit na mga utos:
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
& Nbsp; >>> connection.test_input ('tulong n')
& Nbsp; Mga sinusuportahang command:
& Nbsp; kumusta - sabihin nating halo
& Nbsp; ng tulong - Humingi ng tulong tungkol sa mga command ng server
& Nbsp; hi - sabihin nating halo
& Nbsp; interactive - I-on ang interactive na mode monitor ng
& Nbsp; umalis - Mag-quit ang monitor
& Nbsp; -> ISARA
Maaari naming makakuha ng mga detalyadong tulong sa pamamagitan ng pagtutukoy ng pangalan na command:
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
& Nbsp; >>> connection.test_input ('tulong tulong n')
& Nbsp; Tulong para sa tulong:
& Nbsp;
& Nbsp; Humingi ng tulong tungkol sa mga command ng server
& Nbsp;
& Nbsp; Sa pamamagitan ng default, ang listahan ng mga utos at mga buod Naka-print. Magbigay
& Nbsp; ng isang pangalan ng command upang makakuha ng mga detalyadong dokumentasyon para sa isang command.
& Nbsp;
& Nbsp; -> ISARA
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
& Nbsp; >>> connection.test_input ('tulong kumusta n')
& Nbsp; Tulong para sa halo:
& Nbsp;
& Nbsp; Sabihin halo
& Nbsp;
& Nbsp; Magbigay ng isang pangalan kung hindi ikaw ang mundo.
& Nbsp;
& Nbsp; -> ISARA
Ang interactive na command Lilipat ang monitor sa interactive na mode. Tulad nang nakikita sa itaas, ang monitor ay karaniwang ay tumugon sa isang solong utos at pagkatapos ay isinara ang koneksyon. Sa "interactive na mode", ang koneksyon ay hindi isasara hanggang sa lumabas ang command na ginagamit. Maaari itong maging kapaki-pakinabang kapag ina-access ang monitor sa pamamagitan ng telnet para sa mga diagnostic.
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
& Nbsp; >>> connection.test_input ('interactive n')
& Nbsp; Interactive mode sa. Gamitin ang "umalis" Upang lumabas.
& Nbsp; >>> connection.test_input ('tulungan interactive n')
& Nbsp; Tulong para sa interactive:
& Nbsp;
& Nbsp; I-on ang interactive na mode monitor ng
& Nbsp;
& Nbsp; Karaniwan, ang monitor Release ang koneksyon pagkatapos ng isang solong command.
& Nbsp; Sa pamamagitan ng pagpasok ng interactive na mode, hindi magtatapos ang monitor ang koneksyon
& Nbsp; hanggang ipasok mo ang "umalis" na command.
& Nbsp;
& Nbsp; Sa interactive na mode, isang walang laman na linya Umuulit ang huling command.
& Nbsp;
& Nbsp; >>> connection.test_input ('makatulong sa lumabas n')
& Nbsp; Tulong para umalis:
& Nbsp;
& Nbsp; Mag-quit ang monitor
& Nbsp;
& Nbsp; na ito ay talagang kapaki-pakinabang lamang sa interactive na mode (tingnan ang "interactive"
& Nbsp; utos).
& Nbsp;
Pansinin na ang resulta ng mga utos ay hindi magtapos sa "-> ISARA", na ipinapahiwatig ang isang closed koneksyon.
Mapapansin din na nagbibigay-daan sa interactive na mode mong ulitin ang command.
& Nbsp; >>> connection.test_input ('kumusta n')
& Nbsp; Hi mundo, mabait sa matugunan Ya!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Hi mundo, mabait sa matugunan Ya!
& Nbsp; >>> connection.test_input ('kumusta Jim n')
& Nbsp; Hi Jim, mabait sa matugunan Ya!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Hi Jim, mabait sa matugunan Ya!
Ngayon gagamitin namin ang mag-quit upang isara ang koneksyon.
& Nbsp; >>> connection.test_input ('tumigil n')
& Nbsp; Paalam.
& Nbsp; -> ISARA
Sa wakas, ito ay nagkakahalaga ng tandaan na ang mga pagbubukod ay bubuo ng isang traceback sa koneksyon.
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
& Nbsp; >>> connection.test_input ('kumusta Jim 42 n') # doctest: + elipsis
& Nbsp; Traceback (pinakahuling tawag huling):
& Nbsp; ...
& Nbsp; TypeError: kumusta () ay hindi hihigit sa 2 argumento (3 given)
& Nbsp;
& Nbsp; -> ISARA
Command loop
Paggamit ng "MORE" mode, command ay maaaring magsenyas na gusto nilang i-claim ang lahat ng mga susunod input ng user. Susubukan naming ipatupad ang mga nakakatawa halimbawa upang ipakita kung paano ito gumagana.
Narito ang isang command na ipinapatupad ng isang calculator.
& Nbsp; '.' >>> Prompt =
& Nbsp; >>> def calc (na koneksyon, * args):
& Nbsp; ... kung args at args [0] == 'umalis':
& Nbsp; ... bumalik zc.monitor.QUIT_MARKER
& Nbsp; ...
& Nbsp; ... kung args:
& Nbsp; ... connection.write (. STR (eval ('' sumali (args))))
& Nbsp; ... connection.write (' n')
& Nbsp; ...
& Nbsp; ... connection.write (prompt)
& Nbsp; ... bumalik zc.monitor.MORE_MARKER
Kung magparehistro namin ang command na ito ...
& Nbsp; >>> zc.monitor.register (calc)
... Namin ito pahintulutang magpatakbo at kumuha kami ng isang prompt.
& Nbsp; >>> koneksyon = zc.ngi.testing.TextConnection ()
& Nbsp; >>> server = zc.monitor.Server (koneksyon)
& Nbsp; >>> connection.test_input ('calc n')
& Nbsp ;.
Kung pagkatapos ay bigyan kami ng mas input makuha namin ang resulta kasama ang isa pang senyas.
& Nbsp; >>> connection.test_input ('2 + 2 n')
& Nbsp; 4
& Nbsp ;.
& Nbsp; >>> connection.test_input ('4 * 2 n')
& Nbsp; 8
& Nbsp ;.
Sa sandaling tapos na kami maaari naming sabihin sa calculator upang ipaalam sa amin pumunta.
& Nbsp; >>> connection.test_input ('tumigil n')
& Nbsp; -> ISARA
Simulan ang server
& Nbsp; >>> oras ng pag-import
& Nbsp; >>> import zope.testing.loggingsupport, pag-log
& Nbsp; >>> loghandler = zope.testing.loggingsupport.InstalledHandler (
& Nbsp; ... Wala, antas = logging.INFO)
& Nbsp; >>> zc.monitor.start (9644)
& Nbsp; ('', 9644)
& Nbsp; >>>-print loghandler
& Nbsp; zc.ngi.async.server INFO
& Nbsp; makinig sa ('', 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Wala
& 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; makinig sa ('127.0.0.1', 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Wala
& Nbsp; >>> time.sleep (0.1)
Sumailalim sa port 0:
& Nbsp; >>> addr = zc.monitor.start (0)
& Nbsp; >>> addr == zc.monitor.last_listener.address
& Nbsp; True
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Wala
& Nbsp; >>> time.sleep (0.1)
Sinusubukang magbalat na muli sa isang port sa paggamit:
& 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; Mali
& Nbsp; >>>-print loghandler
& Nbsp; zc.ngi.async.server INFO
& Nbsp; makinig sa ('127.0.0.1', 9644)
& Nbsp; zc.ngi.async.server BABALA
& Nbsp; magawang makinig sa ('127.0.0.1', 9644)
& Nbsp; ugat BABALA
& Nbsp; Hindi nagawang simulan ang zc.monitor server dahil ang address ('127.0.0.1', 9644) ay ginagamit.
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = Wala
& Nbsp; >>> time.sleep (0.1)
& Nbsp; >>> loghandler.uninstall ()
Ano ang bagong sa paglabas:
- Kapag na nagbubuklod na ang monitor sa isang socket Unix-domain, alisin ang isang umiiral na socket sa parehong landas kaya ang magbigkis ay matagumpay. Maaari itong makaapekto sa umiiral na paggamit na may paggalang sa zopectl pag-uugali sa pag-debug, ngunit ay magiging mas mahuhulaang.
Ano ang bagong sa bersyon 0.3.0:
- Nagdagdag ng pinasimpleng interface ng pagpaparehistro .
Mga Kinakailangan :
- Python
Mga Komento hindi natagpuan