Python Tracebackに情報を送信する
「Python Traceback」タブに表示される情報は、警告や例外だけでなく、情報を送信することで任意の情報を表示させることができます。send_dbus_message関数
情報の送信は、「send_tracebacks.send_dbus_message()」関数で行います。def send_dbus_message(category, description, filename='', lineno=1, offset=0, submessages=[], timestamp=None)
category引数
「category」引数には、情報の種類やカテゴリーなどを表す任意の文字列を指定します。description引数
「description」引数には、情報を文字列を指定します。filename引数
「filename」引数には、情報と関係するファイル名を文字列で指定します。ファイル名は、絶対パスで指定してください。
ここで指定したファイルを「gedit」から開くことができます。
この引数は省略可能です。
lineno引数
「lineno」引数には、ファイルの行番号を数値で指定します。ファイルを開いた時、ここで指定された行番号にカーソルが移動します。
行番号は、「1」から始まります。
offset引数
「offset」引数には、ファイルの列番号を数値で指定します。ファイルを開いた時、ここで指定された列番号にカーソルが移動します。
列番号は、「0」から始まります。
submessages引数
「submessages」引数には、サブメッセージ(追加情報)をタプルのリストで指定します。各タプルは、以下のフォーマットで指定します。
filename, lineno, category, description
それぞれの要素の意味は、この関数の同名の引数の意味と同じです。
timestamp引数
「timestamp」引数には、情報の時間を指定します。「Python Traceback」タブに表示される情報は、この時間により並び替えが行われます。
「None」を指定すると、「time.time()」の値が使用されます。
send_dbus_message関数の使用例1
ここでは例として、「send_dbus_message()」関数の基本的な使い方を紹介します。1.ソースコード
以下のソースコードを用意しました。#!/usr/bin/python3 # -*- coding:utf-8 -*- import inspect import time import os.path import send_tracebacks def send_dbus_message(description,submessages=[],msgtime=time.time()): stack = inspect.stack()[1] frame = stack[0] frameinfo = inspect.getframeinfo(frame) send_tracebacks.send_dbus_message( frameinfo.function + '()', description, os.path.abspath(frameinfo.filename), frameinfo.lineno, 0, submessages, msgtime) def test(): send_dbus_message('メッセージ1') send_dbus_message('メッセージ2') send_dbus_message('メッセージ3') if __name__ == '__main__': test()
2.スクリプトの実行
ここでは例として「端末」を起動し、「端末」から上記のPythonスクリプトを実行します。3.Python Tracebackの内容
スクリプトを実行すると、以下のように「Python Traceback」タブに送信した情報が表示されます。4.ファイルを開く
表示された情報をダブルクリックすると、以下のように該当するファイルを「gedit」で開くことができます。send_dbus_message関数の使用例2
ここでは例として、「send_dbus_message()」関数に時間を指定した使い方を紹介します。1.ソースコード
以下のソースコードを用意しました。#!/usr/bin/python3 # -*- coding:utf-8 -*- import inspect import time import os.path import send_tracebacks def send_dbus_message(description,submessages=[],msgtime=time.time()): stack = inspect.stack()[1] frame = stack[0] frameinfo = inspect.getframeinfo(frame) send_tracebacks.send_dbus_message( frameinfo.function + '()', description, os.path.abspath(frameinfo.filename), frameinfo.lineno, 0, submessages, msgtime) def test(): send_dbus_message('メッセージ1',msgtime=3) send_dbus_message('メッセージ2',msgtime=2) send_dbus_message('メッセージ3',msgtime=1) if __name__ == '__main__': test()
2.スクリプトの実行
ここでは例として「端末」を起動し、「端末」から上記のPythonスクリプトを実行します。3.Python Tracebackの内容
スクリプトを実行すると、以下のように「Python Traceback」タブに送信した情報が表示されます。今回情報の送信時に時間の指定を行っているため、時間の早い順にメッセージが表示されます。
4.ファイルを開く
表示された情報をダブルクリックすると、以下のように該当するファイルを「gedit」で開くことができます。send_dbus_message関数の使用例3
ここでは例として、「send_dbus_message()」関数にサブメッセージを指定した使い方を紹介します。1.ソースコード
以下のソースコードを用意しました。#!/usr/bin/python3 # -*- coding:utf-8 -*- import inspect import time import os.path import send_tracebacks def send_dbus_message(description,submessages=[],msgtime=time.time()): stack = inspect.stack()[1] frame = stack[0] frameinfo = inspect.getframeinfo(frame) send_tracebacks.send_dbus_message( frameinfo.function + '()', description, os.path.abspath(frameinfo.filename), frameinfo.lineno, 0, submessages, msgtime) def test(): submsg = [ ('/home/ubuntu/ドキュメント/テキストサンプル/天気.txt', 4, 'サブメッセージ1', '天気'), ('/home/ubuntu/ドキュメント/テキストサンプル/印刷.txt', 2, 'サブメッセージ2', '印刷'), ] send_dbus_message('メッセージ',submsg) if __name__ == '__main__': test()
2.スクリプトの実行
ここでは例として「端末」を起動し、「端末」から上記のPythonスクリプトを実行します。3.Python Tracebackの内容
スクリプトを実行すると、以下のように「Python Traceback」タブに送信した情報が表示されます。今回サブメッセージの指定を行っているため、以下のようにサブメッセージがメッセージの階層内に表示されています。