PyInterceptor: Pemintas Panggilan Fungsi Python untuk Analisis Bukan Invasif
PyInterceptor ialah perpustakaan Python yang sedang dibangunkan (tersedia pada GitHub) yang direka untuk pemintasan bukan invasif dan analisis panggilan fungsi. Bayangkan anda memerlukan maklumat terperinci—nama fungsi, parameter, nilai pulangan, masa pelaksanaan—daripada klien Python yang berinteraksi dengan API Python, tanpa mengubah suai kod sedia ada. PyInterceptor menangani keperluan ini.
Artikel dev.to ini memperkenalkan konsep teras, kes penggunaan dan aplikasi PyInterceptor.
Pemintasan dan Pemprosesan Panggilan Python
Pintasan panggilan fungsi terbahagi kepada dua kategori: menyekat dan tidak menyekat (Rajah 1). Menyekat pemintasan menangkap maklumat panggilan dan kembali serta-merta, tanpa melaksanakan fungsi sasaran. Ini berfaedah untuk mencipta olok-olok atau stub semasa ujian unit. Pintasan tanpa sekatan mengumpulkan maklumat, kemudian melaksanakan fungsi sasaran, menangkap nilai pulangannya sebelum meneruskan. PyInterceptor menyokong kedua-dua mod.
Pintasan panggilan API Python menawarkan pelbagai aplikasi:
Pelaksanaan Terperinci
PyInterceptor beroperasi dengan memasukkan fungsi pengendali yang memintas panggilan yang dimaksudkan untuk API. Pengendali ini menangkap metadata (argumen, cap masa, dll.), menyimpannya dalam objek CallInfo dan mengurus pemajuan panggilan.
Dalam mod menyekat, pengendali menyerahkan CallInfo kepada pemintas boleh panggil yang ditentukan pengguna. Boleh dipanggil ini memproses maklumat (pembalakan, statistik, dll.). Pengendali kemudian mengembalikan keputusan pemintas.
Dalam mod tidak menyekat, pengendali melaksanakan fungsi sasaran, menambah nilai pulangannya kepada CallInfo, dan kemudian memanggil pemintas. Nilai pulangan fungsi sasaran sebenar dikembalikan kepada pemanggil, tidak seperti dalam mod sekatan.
Contoh Kod Ilustrasi
Contoh ini menunjukkan penggunaan PyInterceptor dengan API aritmetik dan kelas Pemproses, mengelog semua panggilan kaedah ke fail JSON.
<code class="language-python">import json from pathlib import Path from typing import List from interceptor import intercept, get_methods, CallInfo class API: # ... (API methods remain unchanged) ... class Processor: # ... (Processor methods remain unchanged) ... class JSONLogger: # ... (JSONLogger class remains unchanged) ... if __name__ == '__main__': # ... (Main method remains unchanged) ...</code>
Kaedah utama mencipta tika JSONLogger (bertindak sebagai pemintas), memintas kaedah API dan Pemproses menggunakan intercept()
, melaksanakan kaedah Pemproses dan menyimpan log ke "logs.json". Output JSON mengandungi rekod terperinci bagi setiap panggilan fungsi.
Penambahan Masa Depan
Penambahbaikan yang dirancang untuk PyInterceptor termasuk:
Maklum balas anda dialu-alukan! Sila tinggalkan komen jika anda mendapati artikel ini membantu atau mempunyai cadangan untuk pembangunan masa hadapan.
Atas ialah kandungan terperinci Menganalisis API dengan PyInterceptor. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!