2

私はPythonのtraceモジュールを使用して、いくつかのコードの実行を追跡しています。後で実行が印刷されるときに、次の形式で印刷されることに気付きました(最小の作業例は以下に続きます)。

<filename>(<line number>): <line of code>

ファイル名だけでなく、完全な(絶対パスまたは相対パス)ファイルパスを取得することもできます。呼び出しのどこかにフラグがあり、trace.Traceこれを実行できるはずですが、ドキュメントでそのようなパラメーターを見つけることができないようです。

そのようなフラグが存在しない場合、ファイルパスを取得するにはどうすればよいですか?のすべてのディレクトリをチェックできると思いsys.pathますが、2つの異なるディレクトリに同じ名前のファイルがある場合をどのように処理しますか?

4

1 に答える 1

0

あまり明白ではありませんでしたが、 でcountfuncsパラメータを使用するtraceか、コマンド ラインから--listfuncs使用している場合はパラメータを使用すると、フル パス名が取得されることがわかりました。traceしたがって、プログラムの場合:

import trace
from recurse import recurse

tracer = trace.Trace(count=False, trace=True, countfuncs=True)
tracer.run('recurse(2)')
tracer.results().write_results()

... (ここからの Doug Hellmann の例を使用) 次の出力が得られます。

functions called:
filename: <string>, modulename: <string>, funcname: <module>
filename: C:\Python33\lib\encodings\cp850.py, modulename: cp850, funcname: IncrementalEncoder.encode
filename: C:\Python33\lib\trace.py, modulename: trace, funcname: _unsettrace
filename: C:\usr\sjl\dev\test\python\recurse.py, modulename: recurse, funcname: recurse

これは、コード行をトレースする命令を無視していることがわかるため、探していたものとはまったく異なります。ただし、Python スクリプトで使用されていたファイルは正確にわかります。

于 2013-01-24T08:27:42.160 に答える