我是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文件执行相同操作,则可以正常工作。
我必须在客户端计算机上收集配置文件数据,并且不能在该计算机上拥有源代码。
我有什么遗失的吗?
答案 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