লগিং ব্যবহার করুন প্রিন্টের আউটপুট প্রিন্ট করুন


104

একটি জটিল ডেটা স্ট্রাকচার দেখানোর জন্য আমি পিপ্রিন্টের আউটপুট ব্যবহার করতে চাই, তবে স্টডআউটের পরিবর্তে লগিং মডিউলটি ব্যবহার করে এটি আউটপুট দিতে চাই।

ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT

আমি দস্তাবেজগুলিতে এক নজরে চেয়েছি এবং এটি পেয়েছি pprint( {}, stream ), তবে এটি দেখতে আরও বিশ্রী। আমি ভাবতাম এমন কিছু ভালো spprintলাগার চেয়ে ভাল লাগত pformat(এর মতো c)।
ইয়ে 379

6
pprint.pformat()যে পৃষ্ঠায় ছিল।
গ্যারেথ লেটি

27
@ লাট্টিওয়ের - যারা এই জাতীয় প্রশ্ন জিজ্ঞাসা করেন তারা সকলেই ডক্স এড়িয়ে যায়নি। আমি একই ডকগুলি পড়েছি এবং ফর্ম্যাটটিও মিস করেছি। স্ট্যাকওভারফ্লোতে আপনি কখনও কখনও অন্য ব্যক্তির অভিজ্ঞতা থেকে রত্নগুলি পান যা ডক্সে ছিল না। এই জিজ্ঞাসা করার জন্য আপনাকে ধন্যবাদ ye379।
Mnebuerquo

উত্তর:


219

pprint.pformatএকটি স্ট্রিং পেতে ব্যবহার করুন এবং তারপরে এটি আপনার লগিং ফ্রেমওয়ার্কে প্রেরণ করুন।

from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))

11
আপনার ডিবাগিংয়ের পরে যদি আপনি এই কোডটি সরিয়ে না ফেলে থাকেন তবে সম্ভবত আপনি যদি "আউটপ্রেস.আইসএলএবলডের জন্য (লগিং.ইডিবিউজি):" ফর্ম্যাট চালনা এড়ানোর জন্য এটি রক্ষা করা উচিত: যখন আপনি আউটপুটটি ব্যবহার করবেন না: ডকস.পিথন। org / 2 / লাইব্রেরি /…
এড ব্রান্নিন

4
@ এডব্রান্নিন কি ফর্ম্যাটটি এত বেশি ওভারহেড যুক্ত করে যে এটি সমস্ত ডিইবিইউজি লগ বিবৃতিতে শর্তসাপেক্ষ যুক্ত করতে সমস্যা?
undefinedvariable

4
পছন্দসই প্রশ্ন মি-টুয়েড আমাকে 2-বছর-পূর্বে কিছু A / B পারফরম্যান্স মেট্রিক তৈরি করতে চায়।
এড ব্রান্নিন

4
আমি AttributeError: 'function' object has no attribute 'pformat'কোন ধারণা পেয়েছি কেন?
জিনস্নো

4
সমাধান: আমার from pprint import pprint,pformat তখন দরকার ছিলlogging.debug((pformat(stuff))
জিনস্নো

20

উপরের সমাধানটি আমার পক্ষে একেবারেই কাটেনি কারণ লগিংয়ের সময় নাম এবং স্তরের নাম যুক্ত করতে আমি একটি ফর্ম্যাটরও ব্যবহার করছি। এটি কিছুটা অবাস্তব দেখাচ্ছে:

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

আরও মার্জিত সমাধান হতে পারে তবে এটি:

for line in pprint.pformat(ds).split('\n'):
    logging.debug(line)

একটু ভাল কিছু উত্পাদন করে:

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
__main__    : DEBUG   :  'bbbbbbbbbbbbbbbbbbbb',
__main__    : DEBUG   :  'cccccccccccccccccccc',
__main__    : DEBUG   :  'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

14
মানুষের ব্যবহারের জন্য ভাল। আপনি লগস্ট্যাশ বা অনুরূপ সরঞ্জামগুলিতে লগগুলি শিপিং করছেন এবং যদি কোনও একক মাল্টলাইন বার্তা প্রেরণ করতে চান তবে এটি দুর্দান্ত নয়।
চার্লস ডাফি

4
লগার কনফিগারেশনের হ্যান্ডলার / ফর্ম্যাটরের পর্যায়ে প্রিন্ট করার কোনও উপায় আছে কি? কনসোলটি প্রিন্ট করার জন্য একটি বৈধ ব্যবহারের ক্ষেত্রে বলে মনে হচ্ছে তবে ফাইলটিতে
ফর্ম্যাট করা

@ চার্লসডুফি উভয় ক্ষেত্রে পরিচালনা করার কোন সহজ উপায় আছে?
jtlz2

4
আমার সমাধানটি হ'ল ফর্ম্যাটটিতে কেবল একটি অতিরিক্ত \nচরিত্র যুক্ত করা। কমপক্ষে এই পথে ব্লকটি একসাথে।
রাইসকাব 31'19
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.