zc.monitor adalah server yang menyediakan antarmuka baris perintah untuk meminta berbagai bit informasi & nbsp;. Server adalah zc.ngi berbasis, sehingga kita dapat menggunakan infrastruktur pengujian zc.ngi untuk menunjukkan hal itu.
& Nbsp; >>> impor zc.ngi.testing
& Nbsp; >>> impor zc.monitor
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
Server mendukung set extensible perintah. Kelihatannya up perintah seperti yang disebutkan zc.monitor.interfaces.IMonitorPlugin "utilitas", seperti yang didefinisikan oleh paket zope.component.
Untuk melihat ini, kita akan membuat sebuah plugin halo:
& Nbsp; >>> def halo (koneksi, nama = 'dunia'):
& Nbsp; ... "" "Sampaikan salamku
& Nbsp; ...
& Nbsp; ... Memberikan nama jika Anda tidak dunia.
& Nbsp; ... "" "
& Nbsp; ... connection.write ("! Hi% s, senang bertemu ya n" nama%)
dan mendaftarkannya:
& Nbsp; >>> zc.monitor.register (halo)
Ketika kita mendaftar perintah, kita dapat memberikan nama. Untuk melihat ini, kita akan mendaftar halo lagi:
& Nbsp; >>> zc.monitor.register (halo, 'hi')
Sekarang kita dapat memberikan perintah halo ke server:
& Nbsp; >>> connection.test_input ('hi n')
& Nbsp; Hi dunia, senang bertemu ya!
& Nbsp; -> TUTUP
Kita bisa melewati nama:
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
& Nbsp; >>> connection.test_input ('halo Jim n')
& Nbsp; Hi Jim, senang bertemu ya!
& Nbsp; -> TUTUP
Server dilengkapi dengan perintah dasar. Mari kita mendaftarkan mereka sehingga kita bisa melihat apa yang mereka lakukan. Kami akan menggunakan antarmuka pendaftaran simplfied:
& Nbsp; >>> zc.monitor.register_basics ()
Yang pertama adalah perintah bantuan. Memberikan bantuan tanpa masukan, memberi daftar perintah yang tersedia:
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
& Nbsp; >>> connection.test_input ('bantuan n')
& Nbsp; Didukung perintah:
& Nbsp; halo - Menyapa
& Nbsp; help - Dapatkan bantuan tentang perintah Server
& Nbsp; hi - Menyapa
& Nbsp; interaktif - Aktifkan modus interaktif monitor
& Nbsp; berhenti - Keluar monitor
& Nbsp; -> TUTUP
Kita bisa mendapatkan bantuan rinci dengan menentukan nama perintah:
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
& Nbsp; >>> connection.test_input ('bantuan bantuan n')
& Nbsp; Bantuan untuk bantuan:
& Nbsp;
& Nbsp; Dapatkan bantuan tentang perintah Server
& Nbsp;
& Nbsp; Secara default, daftar perintah dan ringkasan dicetak. Menyediakan
& Nbsp; nama perintah untuk mendapatkan dokumentasi rinci untuk perintah.
& Nbsp;
& Nbsp; -> TUTUP
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
& Nbsp; >>> connection.test_input ('bantuan halo n')
& Nbsp; Bantuan untuk hello:
& Nbsp;
& Nbsp; Menyapa
& Nbsp;
& Nbsp; Menyediakan nama jika Anda tidak dunia.
& Nbsp;
& Nbsp; -> TUTUP
Perintah interaktif switch monitor ke mode interaktif. Seperti yang terlihat di atas, monitor biasanya merespon perintah tunggal dan kemudian menutup koneksi. Dalam "modus interaktif", sambungan tidak ditutup sampai perintah berhenti digunakan. Hal ini dapat berguna ketika mengakses monitor melalui telnet untuk diagnosa.
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
& Nbsp; >>> connection.test_input (' n interaktif')
& Nbsp; modus Interaktif. Gunakan "berhenti" Untuk keluar.
& Nbsp; >>> connection.test_input ('membantu n interaktif')
& Nbsp; Bantuan untuk interaktif:
& Nbsp;
& Nbsp; Aktifkan modus interaktif monitor
& Nbsp;
& Nbsp; Biasanya, monitor melepaskan sambungan setelah perintah tunggal.
& Nbsp; Dengan memasukkan modus interaktif, monitor tidak akan mengakhiri sambungan
& Nbsp; sampai Anda memasukkan "berhenti" perintah.
& Nbsp;
& Nbsp; Dalam modus interaktif, baris kosong mengulangi perintah terakhir.
& Nbsp;
& Nbsp; >>> connection.test_input ('membantu keluar n')
& Nbsp; Bantuan untuk berhenti:
& Nbsp;
& Nbsp; Keluar monitor
& Nbsp;
& Nbsp; Ini hanya benar-benar berguna dalam modus interaktif (lihat "interaktif"
& Nbsp; command).
& Nbsp;
Perhatikan bahwa hasil dari perintah tidak berakhir dengan "-> DEKAT", yang akan menunjukkan koneksi tertutup.
Juga perhatikan bahwa modus interaktif memungkinkan Anda untuk mengulang perintah.
& Nbsp; >>> connection.test_input ('hello n')
& Nbsp; Hi dunia, senang bertemu ya!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Hi dunia, senang bertemu ya!
& Nbsp; >>> connection.test_input ('halo Jim n')
& Nbsp; Hi Jim, senang bertemu ya!
& Nbsp; >>> connection.test_input (' n')
& Nbsp; Hi Jim, senang bertemu ya!
Sekarang kita akan menggunakan berhenti untuk menutup koneksi.
& Nbsp; >>> connection.test_input ('berhenti n')
& Nbsp; Selamat tinggal.
& Nbsp; -> TUTUP
Akhirnya, perlu dicatat bahwa pengecualian akan menghasilkan traceback pada sambungan.
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
& Nbsp; >>> connection.test_input ('halo Jim 42 n') # doctest: + elipsis
& Nbsp; Traceback (panggilan terbaru terakhir):
& Nbsp; ...
& Nbsp; TypeError: hello () mengambil paling banyak 2 argumen (3 diberikan)
& Nbsp;
& Nbsp; -> TUTUP
Loop perintah
Menggunakan mode "LEBIH", perintah dapat sinyal bahwa mereka ingin mengklaim semua input pengguna di masa depan. Kami akan menerapkan contoh konyol untuk menunjukkan cara kerjanya.
Berikut perintah yang mengimplementasikan kalkulator.
& Nbsp; '.' >>> PROMPT =
& Nbsp; >>> def kalk (koneksi, * args):
& Nbsp; ... jika args dan args [0] == 'berhenti':
& Nbsp; ... kembali zc.monitor.QUIT_MARKER
& Nbsp; ...
& Nbsp; ... jika args:
& Nbsp; ... connection.write (. Str (eval ('' bergabung (args))))
& Nbsp; ... connection.write (' n')
& Nbsp; ...
& Nbsp; ... connection.write (PROMPT)
& Nbsp; ... kembali zc.monitor.MORE_MARKER
Jika kita mendaftar perintah ini ...
& Nbsp; >>> zc.monitor.register (kalk)
... Kita dapat meminta dan kami mendapatkan prompt.
& Nbsp; >>> koneksi = zc.ngi.testing.TextConnection ()
& Nbsp; >>> Server = zc.monitor.Server (sambungan)
& Nbsp; >>> connection.test_input ('kalk n')
& Nbsp ;.
Jika kita kemudian memberikan masukan lebih kita mendapatkan hasil yang cepat ditambah lagi.
& Nbsp; >>> connection.test_input ('2 + 2 n')
& Nbsp; 4
& Nbsp ;.
& Nbsp; >>> connection.test_input ('4 * 2 n')
& Nbsp; 8
& Nbsp ;.
Setelah kami selesai kita bisa mengatakan kalkulator untuk membiarkan kita pergi.
& Nbsp; >>> connection.test_input ('berhenti n')
& Nbsp; -> TUTUP
Mulai Server
& Nbsp; >>> waktu impor
& Nbsp; >>> impor zope.testing.loggingsupport, penebangan
& Nbsp; >>> loghandler = zope.testing.loggingsupport.InstalledHandler (
& Nbsp; ... Tidak, level = logging.INFO)
& Nbsp; >>> zc.monitor.start (9644)
& Nbsp; ('', 9644)
& Nbsp; >>> print loghandler
& Nbsp; INFO zc.ngi.async.server
& Nbsp; mendengarkan pada ('', 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; INFO zc.ngi.async.server
& Nbsp; mendengarkan pada ('127.0.0.1', 9644)
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0.1)
Mengikat port 0:
& Nbsp; >>> addr = zc.monitor.start (0)
& Nbsp; >>> alm == zc.monitor.last_listener.address
& Nbsp; Benar
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0.1)
Mencoba untuk rebind ke port yang digunakan:
& 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; Salah
& Nbsp; >>> print loghandler
& Nbsp; INFO zc.ngi.async.server
& Nbsp; mendengarkan pada ('127.0.0.1', 9644)
& Nbsp; zc.ngi.async.server PERINGATAN
& Nbsp; dapat mendengarkan pada ('127.0.0.1', 9644)
& Nbsp; akar PERINGATAN
& Nbsp; tidak dapat memulai server zc.monitor karena alamat ('127.0.0.1', 9644) sedang digunakan.
& Nbsp; >>> zc.monitor.last_listener.close ()
& Nbsp; >>> zc.monitor.last_listener = None
& Nbsp; >>> time.sleep (0.1)
& Nbsp; >>> loghandler.uninstall ()
Apa yang baru dalam rilis ini:
- Ketika mengikat monitor ke socket Unix-domain, menghapus soket yang ada di jalan yang sama sehingga mengikat berhasil. Hal ini dapat mempengaruhi penggunaan yang ada sehubungan dengan zopectl perilaku debug, namun akan lebih diprediksi.
Apa yang baru dalam versi 0.3.0:
- Ditambahkan antarmuka pendaftaran disederhanakan .
Persyaratan :
- Python
Komentar tidak ditemukan