cProfile似乎覆盖了`__file__`的正常值,如何适应?

时间:2012-03-23 02:02:04

标签: python path cprofile

我有一个依赖于__file__内置全局的程序来提供与程序关联的数据的路径,如path_to_stuff = os.path.join(os.path.dirname(__file__),'stuff')中所示。问题是,当我使用python -m cProfile myprog运行时,__file__的值不再是myprog的路径,而是(显然)cProfile模块的路径,我的东西绝对是不是

我已阅读the manual并在此处搜索,但没有看到任何相关内容。是否有办法(a)让cProfile单独留下__file__或(b)在运行时知道我在cProfile下运行所以我可以在这种特殊情况下使用文字字符串初始化路径?

编辑:或者,我猜,(c),有没有更好的方法来找到一个总是紧挨着program.py的目录?

2 个答案:

答案 0 :(得分:0)

(b)似乎很容易做到。在program.py中,检查__name__的值。如果您直接运行该程序,__name__的值将为"__main__"。相反,如果您在cProfile下运行它,则值将不同。

修改:我无法复制您的问题。当我尝试时,cProfile似乎不会更改__name____file__值。您也可以尝试通过调用cProfile.run()

在脚本中运行探查器

答案 1 :(得分:0)

如果你还有问题,我已经为你找到了解决方案。

path_to_stuff = os.path.join(path.dirname(path.realpath(sys.argv[0])), 'stuff')