変数ウォッチはたったの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に例外処理を入れて安定的に動くようにする
コメント