Chcę użyć danych wyjściowych pprint, aby pokazać złożoną strukturę danych, ale chciałbym wyprowadzić je za pomocą modułu logowania, a nie standardowego wyjścia.
ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
Chcę użyć danych wyjściowych pprint, aby pokazać złożoną strukturę danych, ale chciałbym wyprowadzić je za pomocą modułu logowania, a nie standardowego wyjścia.
ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
pprint.pformat()
był na tej stronie.
Odpowiedzi:
Użyj, pprint.pformat
aby uzyskać ciąg, a następnie wyślij go do struktury rejestrowania.
from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))
AttributeError: 'function' object has no attribute 'pformat'
pojęcie, dlaczego?
from pprint import pprint,pformat
wtedylogging.debug((pformat(stuff))
Powyższe rozwiązanie nie do końca mi się podoba, ponieważ używam również programu formatującego do dodawania nazwy i nazwy poziomu podczas logowania. Wygląda trochę nieporządnie:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
Może być bardziej eleganckie rozwiązanie, ale to:
for line in pprint.pformat(ds).split('\n'):
logging.debug(line)
tworzy coś ładniejszego:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
__main__ : DEBUG : 'bbbbbbbbbbbbbbbbbbbb',
__main__ : DEBUG : 'cccccccccccccccccccc',
__main__ : DEBUG : 'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
\n
znaku do formatu. Przynajmniej w ten sposób blok jest razem.
pprint( {}, stream )
, ale stwierdziłem, że jest to raczej niezręczne. pomyślałbym, że coś takiegospprint
mogłoby być ładniejsze niżpformat
(jak wc
).