私は、大規模 (356 ファイル) の複雑な Python プログラムがどのようにセットアップされるかを学んでいます。コードを手動で読み込んで解析する以外に、プログラムの流れをたどる良い方法はありますか?
私が便利だと思う2つの方法があります:
- Bash の「set -x」に似たもの
- 出力の各行を出力するファイルを表示するもの
上記を実行する方法、または有用だと思われる他の方法はありますか?
私は、大規模 (356 ファイル) の複雑な Python プログラムがどのようにセットアップされるかを学んでいます。コードを手動で読み込んで解析する以外に、プログラムの流れをたどる良い方法はありますか?
私が便利だと思う2つの方法があります:
上記を実行する方法、または有用だと思われる他の方法はありますか?
非常に面倒かもしれませんが、デバッガーを使用して実行の流れを追跡すると、命令ごとにある程度役立つ可能性があります。
import pdb
pdb.set_trace()
これが実際に良いアイデアかどうかはわかりませんが、標準出力への出力の各行の前にファイルと行を表示するためのフックを実際に書いたので、それをあなたに渡すこともできます…</p>
import inspect, sys
class WrapStdout(object):
_stdout = sys.stdout
def write(self, buf):
frame = sys._getframe(1)
try:
f = inspect.getsourcefile(frame)
except TypeError:
f = 'unknown'
l = frame.f_lineno
self._stdout.write('{}:{}:{}'.format(f, l, buf))
def flush(self):
self._stdout.flush()
sys.stdout = WrapStdout()
それをモジュールとして保存するだけで、その後import
、標準出力のすべてのチャンクにファイルと行番号がプレフィックスとして付けられます。
もちろん、次の場合、これはかなり醜くなります。
stdout.write
直接、またはprint
2.x またはend=''
3.x ではマジック コンマを使用して)。しかし、トリッキーなディープ Python マジック ビットはすべてそこにあります。その上に非常に簡単に構築できます。
相互参照プログラムを探すことができます。これを行うpyxrという古いプログラムがあります。相互参照の目的は、クラスが相互にどのように参照されているかを知らせることです。IDE の中には、この種のことを行うものもあります。