pythonスクリプトが実行されると、その行をトレースします。しかし、私が使用するプログラムは、標準出力に物事を印刷する必要があります。 pythonトレースモジュールのトレースオプションは、それらをstdoutに出力します。それをstdoutに出力しないように伝えるのに、ファイルに保存するのはどうですか? outfile
パラメータを設定しようとしましたが、トレース行の印刷を停止しません。Pythonトレースモジュール - 実行時の行をトレースしますが、標準出力ではなくファイルに保存します
答えて
トレースモジュールのコードをコピーし、いくつか変更して、選択したファイルに出力を書き込むことができます。変更したい行600と650の間に5つのprint
文があります。
my_out_file = open("/home/mytrace.txt", "w")
と、このようにprint文を変更します:あなたは、ファイルの最後にこれを追加することができ、それはあまりにもきれいにする必要はありませんので
print "%s(%d): %s" % (bname, lineno,
linecache.getline(filename, lineno)),
はこのようになります。
print >>my_out_file, "%s(%d): %s" % (bname, lineno,
linecache.getline(filename, lineno)),
トレースモジュールのドキュメントごとに、outfileは更新されたカウント情報を書き込むためにのみ使用されます。
トレースモジュールは、stdoutにトレース情報を印刷していきます。
手動トレースの場合、エントリ関数がある場合は、sys.settraceを使用してコールフローをトレースする作業を行いました。行ごとにトレースするように拡張することができます。情報をstdoutに出力するのではなく、いつでもファイルに保存することができます。
シンプルな構造は、
import sys
import os
import linecache
trace_depth = 0
def trace(f):
def globaltrace(frame, why, arg):
global trace_depth
if why == "call":
# function call event , extract information
.....
pass
trace_depth = trace_depth + 1
return None
def localtrace(frame, why, arg):
global trace_depth
if why == "line":
# line execution event
pass
elif why == "return":
trace_depth = trace_depth - 1
# function return event
return localtrace
def _f(*args, **kwds):
sys.settrace(globaltrace)
result = f(*args, **kwds)
sys.settrace(None)
return result
return _f
globaltraceとlocaltraceがイベントで呼び出され、コールバック関数ですです - ときに関数 "なぜ"
がイベントのために言いますフレームの詳細から情報を抽出することができます。
if why == "call":
# Parent frame details
p_func = frame.f_back.f_code.co_name
p_file = frame.f_back.f_code.co_filename
p_lineinfo = frame.f_back.f_lineno
私は完全な詳細hereを投稿しました。
いわゆる「機能トレース」described for PHPが必要になることがあります。私はPython toolを作成し、これはpyfunc sys.settrace()フックで説明したものと同様の出力を生成します。
コマンドラインでtraceを呼び出していますか?もしそうなら、私はstdoutをどのファイルにも再ルーティングする標準的な方法を使用することを推奨します。 Redirect all output to file
foo > allout.txt 2>&1
私はあなたが窓にいる場合、Windowsは、同様の何かを持っていると確信しています。
- 1. Subprocess.communicateは改行を標準出力に出力します
- 2. メソッドの実行時の標準出力と標準エラーのリダイレクト
- 3. Log4jがファイルまたは標準出力に出力しない
- 4. プロセスを実行し、その標準出力をVC++で返します
- 5. bashスクリプトと標準入力で実行可能な実行ファイルの出力を記録する方法は?
- 6. pythonのログ出力を標準出力ではなくファイルにリダイレクトする方法はありますか?
- 7. Pythonでスクリプトを何度か実行して出力を保存します
- 8. linuxコマンドを実行して出力をファイルに保存する
- 9. 標準入力でredis-serverを実行しています
- 10. Pythonのpexpectスクリプトはエラーなく実行されますが、出力ファイルには出力がありません
- 11. logstashをサービスとして実行し、標準出力を表示
- 12. C++は - コンソール出力を維持しながらファイルに標準出力/標準エラー出力を複製
- 13. Prolog実行の出力を保存します
- 14. mpirunはリダイレクトされた標準出力を保持します
- 15. ファイルを読み取り、標準出力にコピーします。
- 16. pythonスクリプトを実行して出力をCSVファイルとして保存
- 17. 実行時にLog4J2出力ファイルを変更します
- 18. Rails5 + Passenger + Nginx:ログは常に標準出力に行きます
- 19. Python - サイトへのクエリを実行し、結果を標準出力に出力する
- 20. 同じファイルと標準出力に直接標準エラーがありますか?
- 21. 標準出力をファイルにリダイレクト+ ANT +コンソールに出力しない
- 22. シェルで実行する標準出力をリダイレクト
- 23. Ant exec:標準出力をリダイレクトしますが、標準エラーは出力しません
- 24. C#が新しいウィンドウなしでバッチスクリプトを実行して、リッチテキストボックスに、すべての(標準/エラー)出力をリダイレクト
- 25. bashのティースクリプトの出力をファイルにし、標準出力は、タイムスタンプ
- 26. 異なるファイルのコマンドを実行して出力結果を保存する
- 27. 代替コマンドは別のbashコマンドに出力しますが、同時に改行を保存しますか?
- 28. 時間トラッキングデータを保存する標準があります
- 29. Cmakeのfind_programから実行可能ファイルを保存してPythonで実行できるようにします
- 30. のpythonロギングモジュール - ターミナル、標準出力、標準エラー出力
トレースデータをファイルに保存できるとにかく/他のモジュールはありますか? – Rory
@Rory:どのように実行をトレースしていますか?どのコマンドラインを使用していますか?以前は手動トレースを使用していましたが、出力を自分の好みに合わせて修正しました。 – pyfunc