Python cProfile:pyo文件是否可能

时间:2011-07-05 15:41:06

标签: python cprofile

我是Python的初学者,并试图通过命令行调用cProfile,即

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 个答案:

答案 0 :(得分:1)

我很确定cProfile使用了execfile()。提示来自文档(http://docs.python.org/library/profile.html):

  

此函数只接受一个参数   可以传递给 exec   声明

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​​