Twiggy daha Pythonic giriş paket yaratmaq üçün erkən mərhələdə layihədir.
istifadə:
Display iş:
>>> Idxal sys; sys.stderr = sys.stdout
Setup sadədir
Sizin main.py In:
>>> Idxal Twiggy
>>> Twiggy.quick_setup ()
Logging Mesajlarım
>>> Twiggy idxal *
Main interface sehrli log edir:
>>> #doctest Daxil: + ellips
<0x ... at twiggy.Logger.Logger object>
Bu standart səviyyədə istifadə edərək, qutusuna həyata çalışır:
>>> Log.debug ("Sən qayğı bilməz)
Debug: Siz qayğı bilər
>>> Log.error (OMFG! Yanğın Pants! ")
ERROR: OMFG! Yanğın şalvar!
Bu yeni stil u mənim, format strings bir sıra dəstəkləyir:
>>> Log.info (Mən {0} geymək mənim {harada} ',' şalvar, harada = 'ayaqları)
INFO: Mən ayaqları şalvar geymək
Köhnə stil baxmayaraq gözəl işləyir:
>>> Log.options (style = 'faiz). Info ("Mən% s kimi," Motosiklet ")
INFO: I Motosiklet istəyirəm
As şablonları edin:
>>> Log.options (style = "dollar). Info ('$ nə kill, nə =' Cars)
INFO: Cars öldürmək
Siz loggers olar:
>>> MyLog = log.name (alfredo)
>>> Mylog.debug ('salam')
Debug: alfredo: salam
Amma adı obyekt heç bir əlaqəsi yoxdur; yalnız insan istifadə üçün:
>>> MyLog (alfredo) log.name edir
Saxta
yayan Mesajlarım
Emitentlər azad coupled olunur:
>>> Twiggy.emitters #doctest: + ellips
{'*' <0x ... at twiggy.Emitter.Emitter object>}
Siz emitentlər bir min_level bilərsiniz:
>>> Twiggy.emitters ['*']. Min_level = twiggy.Levels.INFO
>>> Log.debug ("Yardım yardım mən yatırıldı alıram")
>>> Log.info ("Mən hələ olduqca ölü deyiləm")
INFO: Mən hələ olduqca ölü deyiləm
Siz regexes, və ya ixtiyari funksiyaları ilə filter edə bilərsiniz:
>>> Twiggy.emitters ['*']. Filter = ". * Şalvar. *"
>>> Log.info ("var mənim {0} haqqında", "şalvar")
INFO: mənim şalvar var
>>> Log.info ("köynək" "Mənim {0} var")
Bütün ki, yenidən edək:
>>> Twiggy.emitters ['*']. Filter = True
>>> Twiggy.emitters ['*']. Min_level = twiggy.Levels.DEBUG
Better çıxış
Newlines ismarıcları yatırıldı olunur; ki, başına mesajı söndürüldükdə bilər:
>>> Log.info ('user ninput nannoys NUS)
INFO: Istifadəçi ninput nannoys NUS
(Biz ndeal ') .info >>> log.options (suppress_newlines = False)
INFO: biz
müqavilə
İstisnalar prefixed olunur. Də exc_info keçə bilər. Bir xətt qat bir prefiks kimi ' n "istifadə edin:
>>> Cəhd:
... 1/0
... Istisna olmaqla:
... Log.trace (səhv) (oh Noes) #doctest xəbərdarlıq:. + Ellips
XƏBƏRDARLIQ: oh Noes
TRACE Traceback (ən son zəng, son):
TRACE File "
TRACE 1/0
TRACE ZeroDivisionError: sıfır tam şöbə və ya modulo
Əlaqə Chaining
Bu zəncirlənmiş stil çox istəyirəm.
>>> Log.name (benito). Info (hi var)
INFO: benito: hi var
Bu, asan strukturlaşdırılmış giriş edir:
>>> Log.fields (yolları = 42) .info (gəzintiyə gedir)
INFO: yolları = 42: gəzmək üçün gedir
Qisa kəsdi. Uzunluğu statistika toplanması üçün böyük.
>>> Log.struct (yolları = 42 delfinlər = 'minnətdar)
INFO: delfinlər = şükür: yolları = 42:
Qismən webapps üçün faydalı ola bilər məcburi:
>>> Per_request_log = log.fields (request_id = '12345')
>>> Per_request_log.fields (satır = 100, istifadəçi = 'səmimi'). Info (verilənlər bazası frobnicating)
INFO: request_id = 12345: satır = 100: user = frank: frobnicating bazası
>>> Per_request_log.fields (bytes = 5678) .info (borular üzərində səhifəni göndərilməsi)
INFO: bytes = 5678: request_id = 12345: borular üzərində səhifəni göndərilməsi
Zəncirlənmiş stil zəhmli deyil:
>>> Log.name (donjuan). Sahələri (şalvar = 'sexy). Info ("salam, {olan} istəyirəm {nə}?" Kim =' qadın nə = 'rəqsi)
INFO: donjuan: şalvar = sexy: salam, xanımlar rəqs etmək istəyirsiniz?
Dynamic!
Args / sahələrdə istənilən funksiyalar adlanır və dəyər substitued olunur:
>>> Idxal os
>>> Twiggy.lib idxal thread_name olan
>>> Thread_name ()
"MainThread"
+ Ellips ("Mən mövzu Ben {0}", thread_name) #doctest .info >>> log.fields (pid = os.getpid)
INFO: pid = 1076: Mən mövzu MainThread Ben
Bu, bizim bəzi cool stuff bunu var imkan qismən bağlı loggers ilə faydalı ola bilər:
>>> Sinif ThreadTracker (obyektin):
... Def __init __ (özünü, obj):
... Öz .__ obj = obj
... # Qismən bağlı Çetele
... Self = log.name ("tracker") daxil .__. Sahələri (obj_id = id (obj), mövzu = thread_name)
... Self .__ log.debug ("izleme başladı")
... Def __ __getattr (özünü, cəlbedici):
... Self .__ log.debug ("əldə {0}", cəlbedici)
... Qaytarılması getattr (özünü .__ obj, cəlbedici)
...
>>> Sinif Bunch (obyektin):
... Keçmək
...
>>> Foo = Bunch ()
>>> Foo.bar = 42
>>> Izlenen = ThreadTracker (foo)
Debug: tracker: obj_id = 14063980: thread = MainThread: izleme başladı
>>> Tracked.bar
Debug: tracker: obj_id = 14063980: thread = MainThread: əldə bar
42
>>> Idxal Threading
>>> T = threading.Thread (target = lambda: tracked.bar * 2, name = "TheDoubler")
>>> T.start ()
Debug: tracker: obj_id = 14063980: thread = TheDoubler: əldə bar
Siz, həqiqətən,) (bunu bir callable, Repr daxil olmaq və ya Lambda onu kesmek istəyirsinizsə.
optimallaşdırılması
Bir optimallaşdırılması kimi, min_level loggers müəyyən edilə bilər:
>>> Mylog.min_level = twiggy.Levels.INFO
>>> Mylog.info ("Sən bu görmək")
INFO: alfredo: Bu çox
>>> Mylog.debug ("Bu gizli")
Onlar həmçinin format_spec fəaliyyət bir filtre edir. istifadə halda səmərəli axmaq bir şey bunu bir kitabxana xüsusi mesaj off bağlanılır:
>>> Mylog.filter = lambda s: "Shenanigans" deyil s
>>> Mylog.info ("kamalsızlıq başlayaraq")
INFO: alfredo: Başlanğıc kamalsızlıq
>>> Xrange i (3): 3 böyük dəyərlər üçün #
... Mylog.info ("Mən shenanigans zəng!")
>>> Mylog.info ("kamalsızlıq Son")
INFO: alfredo: End kamalsızlıq
tələblər
- Python
Şərhlər tapılmadı