2011-07-05 38 views
0

我初學者到Python和試圖通過命令行來調用CPROFILE即的Python CPROFILE:是否有可能爲杓文件

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

但它拋出一個錯誤消息,指出

語法錯誤:非第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 

針對.pyc或.pyo運行profile/cProfile的用例可能只是沒有解決。對於這種情況,我還沒有找到一個規範的解釋,但是由於cPython解釋器的工作原理,主腳本通常不會被字節編譯。解釋器不會自動字節編譯主腳本,但會爲導入的模塊執行此操作。這裏是關於這個主題的SO問題:Why does Python compile modules but not the script being run?

要解決您的問題,您可以啓動腳本來調用您通常在.pyo中執行的主要內容,您想要進行配置。暴露的代碼將是非常微不足道的。

launch.py​​

import foo 
foo.call_my_func() 

然後運行:

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

+0

我試着在launch.py​​文件導入xyz.pyo文件,但蟒蛇給了我錯誤 ' 導入錯誤:沒有模塊名爲xyz ' 如果我把xyz.py放在xyz.pyo的plae中,python很高興 @ jeremy-brown – Kashif

+0

@Kashif:爲了導入'xyz.pyo'(而不是'.pyc'和'.py'),你必須用'-OO'運行Python – xOneca

相關問題