2011-07-05 6 views
0

は可能ですし、コマンドラインからcProfileを起動しようとしているPythonのcProfile:それは私は、Pythonの初心者ですピョファイル

python -m cProfile -o ./temp/PROFILE.log myScript.pyo 

つまりしかし、それは

ことでSyntaxErrorを示すエラーメッセージスロー:非を1行目myScript.pyoファイルのASCII文字 '\ xb3'。ただし、エンコードは宣言されていません。詳細については、 http://www.python.org/peps/pep-0263.htmlを参照してください。

しかし、私がmyScript.pyファイルで同じことをしてもうまくいきます。

クライアントマシンでプロファイルデータを収集する必要があり、そのマシンにソースコードを設定することはできません。

紛失しているものがありますか?

答えて

1

私は、cProfileがexecfile()を利用していることを確信しています。ヒントは、ドキュメント(http://docs.python.org/library/profile.html)から来ている:

This function takes a single argument that can be passed to the exec statement

execfileを()* .pycファイルと* .pyoファイルを実行することができません - それは同じ例外で失敗します。

>>> execfile("myscript.pyc") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "tix_email.pyc", line 1 
SyntaxError: Non-ASCII character '\xd1' in file tix_email.pyc on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 

profile/cProfileを.pycまたは.pyoに対して実行するというケースは、たぶん決して扱われていなかったでしょう。なぜそれが当てはまるのかについての標準的な説明は見つかりませんでしたが、メインスクリプトは、cPythonインタープリタが動作する方法のためにバイトコンパイルされないことが一般的に予想されます。インタプリタは自動的にメインスクリプトをバイトコンパイルしませんが、インポートされたモジュールに対しては自動的にバイトコンパイルします。ここでトピックに関する質問があります:Why does Python compile modules but not the script being run?

問題を回避するには、プロファイルする.pyoで通常実行していたものをmainとして呼び出すスクリプトを起動することができます。公開されたコードはかなり簡単です。

launch.py​​

import foo 
foo.call_my_func() 

そして実行します。

python -m cProfile -o ./temp/PROFILE.log launch.py

+0

私はlaunch.py​​ファイルが、Pythonでxyz.pyoファイルをインポートしようとしたが、私は ' はImportErrorをエラー得られます。 xyzという名前のモジュールがありません ' xyz.pyoのplaeにxyz.pyを置くと、pythonは満足しています @ jeremy-brown – Kashif

+0

@Kashif: 'xyz.pyo'(' .pyc'や '.py'ではなく)をインポートするには、Pythonを' -OO'で実行する必要があります – xOneca

関連する問題