kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。

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」タブに送信した情報が表示されます。
    今回サブメッセージの指定を行っているため、以下のようにサブメッセージがメッセージの階層内に表示されています。


  4.ファイルを開く

    表示された情報をダブルクリックすると、以下のように該当するファイルを「gedit」で開くことができます。



関連コンテンツ
同一カテゴリーの記事
コメント
オプション