【保存版】python pysnooper たった2行貼り付け 超強力 ウルトラスーパーアメイジングlogツール

変数ウォッチはたったの2行、これは最高 log不要(有ってもいいけど)

変数値の確認のため、print(変数)書きまくりやら、loggingなんちゃらやら設置しなくて同じ効果が自動で得られるすんごいモジュールがあった。

最初に pip install pysnooperでインストールしてください

関数の頭に@pysnooper.snoop()

import pysnooperでモジュールをインポート
変数値を出力したい関数の前に@pysnooper.snoop()と置くだけ

#importして
import pysnooper
#関数の前に置くだけ
@pysnooper.snoop()
def main():

 

本来は時間と価格を出力するだけなので、裏で何か動いているのかいないのかすら分からない

時間: 2020/03/08 22:31 始値: 961844 終値: 961568
時間: 2020/03/08 22:32 始値: 961576 終値: 961087
時間: 2020/03/08 22:33 始値: 961107 終値: 961438
時間: 2020/03/08 22:34 始値: 961031 終値: 960476
時間: 2020/03/08 22:35 始値: 960476 終値: 959745
時間: 2020/03/08 22:36 始値: 959850 終値: 960529
時間: 2020/03/08 22:37 始値: 960529 終値: 961134
時間: 2020/03/08 22:38 始値: 961134 終値: 960125
時間: 2020/03/08 22:39 始値: 960310 終値: 962152
......................

############ ここから pysnooperを設置して実行したもの
loggingのイイやつ的な出力

source path:... bf_try_except.py
22:39:32.211787 call       236 def main():
22:39:32.213787 line       237     last_data = get_price(60,-2)
New var:....... last_data = {'close_time': 1583674740, 'open_price': 960310,...2535, 'low_price': 959248, 'close_price': 962152}
22:39:33.264360 line       238     print_price( last_data )
時間: 2020/03/08 22:39 始値: 960310 終値: 962152
22:39:33.264360 line       239     time.sleep(10)
22:39:43.264371 line       242         "buy_signal":0,
22:39:43.264371 line       243         "sell_signal":0,
22:39:43.266367 line       245             "exist" : False,
22:39:43.270363 line       246             "side" : "",
22:39:43.270363 line       247             "count" : 0
22:39:43.271630 line       250             "exist" : False,
22:39:43.271630 line       251             "side" : ""
New var:....... flag = {'buy_signal': 0, 'sell_signal': 0, 'order': {'e...t': 0}, 'position': {'exist': False, 'side': ''}}
22:39:43.272634 line       255     while True:
22:39:43.273632 line       256         if flag["order"]["exist"]:
22:39:43.273632 line       259         data = get_price(60,-2)
New var:....... data = {'close_time': 1583674740, 'open_price': 960310,...2535, 'low_price': 959248, 'close_price': 962152}
....................................................

 

@pysnooper.snoop(‘ファイル名’)でファイル出力

画面出力が多すぎて目で追えない時は、@pysnooper.snoop(‘ファイル名’)とすれば、そのファイルに出力してくれる。ファイル名.txt ファイル名.log ファイル名.csv などにすれば良い。

デバックモードで ステップ実行 して、都度変数の値を出力してくれてる感じ。役に立ちそう。

毎回自動で[日付と時間]を入れたCSVファイルに出力

①モジュールをimportして
import datetime
import pysnooper

②関数の上にこの4行を置けば良いのです
today = datetime.datetime.fromtimestamp(time.time())
today.strftime(‘%Y/%m/%d,%H:%M:%S’)
snoop_file=’log\snoop’ + today.strftime(‘%Y-%m-%d-%Hh%Mm’)+’.csv’
@pysnooper.snoop(snoop_file)
def 監視したい関数()

この4行を出力したい関数の上に貼り付ければ良いのでーす

@pysnooper.snoop 欠点

 

情報量が多すぎてコンソール出力は変数の確認などとても、

textに出してもごちゃごちゃで見ずらい

拙者はCSVに出力して、変数毎にエクセルで色付けなどして確認しておる。

logと違って超簡単な分自分でコントロールできないが,そこはloggingで出せばいい。

 

ちなみに、関係ないし意味もないですけど動かしてるプログラムはこれ↓

Bitflyerの自動売買BOTに例外処理を入れて安定的に動くようにする