print 跟 log

貓橘毛 aka Lanfon
2 min readAug 1, 2017

--

話說寫 command line tools 的時候,除了 argparse 以外,很多時候其實很懶得用 logging 開 log 來用….(畢竟小工具嘛… 光是 logging 的 config 大概就佔掉快 20 行了QQ)

這種時候單純的 print 就很好用惹,預設會寫到 sys.stdout ,有需要吐 error 的時候就可以用 file=sys.stderr (寫到 stderr 可以避免用 > 存 log 的時候看不到 error 之類der)

printfile 基於 file-like object 的特性拿來取代 f.write() 也非常的好用; f.write() 預設是不會換行的,在逐行寫入又要換行的情況下,會寫出像 f.write(line + os.linesep) 這種 ….,用 print 的寫法會像是 print(line, file=f) 。(其實沒有哪個比較好,純粹就是個人喜好(?))

最後一個是 verbose ,用 logging 的話直接改 log level 就好了;單純用 print 的話,蠻容易會寫出像是:

if verbose:
print(msg)

這種有點佔空間的 code (?),換個寫法可以像這樣:

# output = sys.stdout if verbose else io.StringIO
print(msg, file=output)

這樣就可以避掉很多需要判斷 verbose 再輸出的情況惹~

沒惹,掰。

--

--

貓橘毛 aka Lanfon
貓橘毛 aka Lanfon

Written by 貓橘毛 aka Lanfon

知,不知,上;不知,知,病。

No responses yet