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 3 エンジニア認定[基礎試験]問題集【電子書籍】[ 株式会社ビープラウド ]
徹底攻略Python 3 エンジニア認定[基礎試験]問題集【電子書籍】[ 株式会社ビープラウド ] 1,320円(税込)【送料込】

楽天Kobo電子書籍ストア

<p>[この電子書籍は固定型レイアウトです。リフロー型と異なりビューア機能が制限されます]固定型レイアウトはページを画像化した構造であるため、ページの拡大縮小を除く機能は利用できません。また、モノクロ

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

楽天ブックス

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

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

楽天ブックス

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

独習Python 第2版 [ 山田 祥寛 ]
独習Python 第2版 [ 山田 祥寛 ] 3,608円(税込)【送料込】

楽天ブックス

山田 祥寛 翔泳社ドクシュウパイソンダイニハン ヤマダ ヨシヒロ 発行年月:2025年05月14日 予約締切日:2025年05月13日 ページ数:624p サイズ:単行本 ISBN:978479818

VTuberサプーが教える! Python 初心者のコード/プロのコード [ サプー ]
VTuberサプーが教える! Python 初心者のコード/プロのコード [ サプー ] 2,860円(税込)【送料込】

楽天ブックス

サプー 技術評論社ブイチューバーサプーガオシエルパイソンショシンシャノコードプロノコード サプー 発行年月:2024年07月27日 予約締切日:2024年07月26日 ページ数:288p サイズ:単行

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