Python print 出力先

PC

Pythonのプログラムを走らせるときの標準出力の出力先として、コマンドラインとファイルを同時に選ぶためのTipsです。

ニーズはバッチがうまく走らなかったプログラムをリアルタイムで確認したかったところから。

自分の所有物件の周辺の賃貸付状況を確認するために、Suumoで周辺のエリアの募集情報をごそっと抜き出すプログラムを夜間バッチで走らせているのですが、時折エラーで終了していることがありました。

夜間バッチでの経緯は、そのプログラムでは標準出力をテキストファイルに吐き出させているのでそれを確認すれば良いのですが、デバッグの作業でそのプログラムをリアルタイムで走らせているときには、実行が終わるまで状況を確認できない、ということがありました。
通常だとprint文での出力をコマンドライン上にするかファイルにするかの択一になってしまうという難点があるのですね。

で、両方同時に吐き出すような仕様にできないかな、ということでそういうプログラムを組んでみた、というわけです。
大元のプログラムはこんな感じです。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def job_rent_suumo():
logfile = CE.downfolder + 'suumo.txt'
sys.stdout = CE.Logger(logfile)
print("賃貸:処理開始")
dwn_suumo()
print("賃貸:処理完了")
def job_rent_suumo(): logfile = CE.downfolder + 'suumo.txt' sys.stdout = CE.Logger(logfile) print("賃貸:処理開始") dwn_suumo() print("賃貸:処理完了")
def job_rent_suumo():
    logfile = CE.downfolder + 'suumo.txt'
    sys.stdout = CE.Logger(logfile)
 
    print("賃貸:処理開始")
    dwn_suumo()
    print("賃貸:処理完了")

stdoutの吐き出し先としてLoggerというclassにしています。
そしてそのLoggerの中身はこんな感じです。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
class Logger:
def __init__(self, filename):
self.console = sys.stdout
self.file = open(filename, 'w')
def write(self, message):
self.console.write(message)
self.file.write(message)
def flush(self):
self.console.flush()
self.file.flush()
class Logger: def __init__(self, filename): self.console = sys.stdout self.file = open(filename, 'w') def write(self, message): self.console.write(message) self.file.write(message) def flush(self): self.console.flush() self.file.flush()
class Logger:

    def __init__(self, filename):
        self.console = sys.stdout
        self.file = open(filename, 'w')

    def write(self, message):
        self.console.write(message)
        self.file.write(message)

    def flush(self):
        self.console.flush()
        self.file.flush()

これで、ファイルもコマンドラインも標準出力の出し先となりました。

Python本

Pythonチュートリアル 第4版 [ Guido van Rossum ]
Pythonチュートリアル 第4版 [ Guido van Rossum ] 1,980円(税込)【送料込】

楽天ブックス

Guido van Rossum 鴨澤眞夫 オライリー・ジャパンパイソンチュートリアルダイヨンハン グイド ヴァン ロッサム カモサワ マサオ 発行年月:2021年02月01日 予約締切日:2020年

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ) [ 国本 大悟 ]
スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ) [ 国本 大悟 ] 2,750円(税込)【送料込】

楽天ブックス

スッキリわかる入門シリーズ 国本 大悟 須藤 秋良 インプレススッキリワカルパイソンニュウモンダイニハン クニモト ダイゴ スドウ アキヨシ 発行年月:2023年11月06日 予約締切日:2023年0

Pythonエンジニア育成推進協会監修 Python実践レシピ [ 鈴木 たかのり ]
Pythonエンジニア育成推進協会監修 Python実践レシピ [ 鈴木 たかのり ] 2,970円(税込)【送料込】

楽天ブックス

鈴木 たかのり 筒井 隆次 技術評論社パイソンエンジニアイクセイスイシンキョウカイカンシュウ パイソンジッセンレシピ スズキ タカノリ ツツイ リュウジ 発行年月:2022年01月19日 予約締切日:

Python[完全]入門 [ 松浦健一郎 ]
Python[完全]入門 [ 松浦健一郎 ] 3,190円(税込)【送料込】

楽天ブックス

松浦健一郎 司ゆき SBクリエイティブパイソンカンゼンニュウモン マツウラケンイチロウ ツカサユキ 発行年月:2021年01月25日 予約締切日:2021年01月24日 ページ数:592p サイズ:単

徹底攻略Python 3 エンジニア認定[基礎試験]問題集 [ 株式会社ビープラウド ]
徹底攻略Python 3 エンジニア認定[基礎試験]問題集 [ 株式会社ビープラウド ] 2,640円(税込)【送料込】

楽天ブックス

株式会社ビープラウド 一般社団法人Pythonエンジニア育成推進協会 インプレステッテイコウリャクパイソンスリーエンジニアニンテイキソシケンモンダイシュウ カブシキガイシャビープラウド イッパンシャダ

楽天ウェブサービスセンター
タイトルとURLをコピーしました