如何找到代码对象来自的文件?
我需要知道代码对象来自哪里;它的模块。所以我(天真地)尝试过:
os.path.abspath(code.co_filename)
但这可能有效也可能无效,(我认为这是因为abspath依赖于cwd)
有什么方法可以获取代码对象模块的完整路径?
编辑:
检查模块中的函数:getfile、getsourcefile、getmodule,仅获取文件名,而不获取其路径(与 co_filename 相同)。也许他们使用abspath。
I need to know where a code object comes from ; its module. So I (naively) tried :
os.path.abspath(code.co_filename)
But that may or may not work, (I think it's because abspath depends on cwd)
Any way to get the full path of a code object's module ?
EDIT :
The functions from the inspect module : getfile, getsourcefile, getmodule, get only the file name, not its path (same thing as co_filename). Maybe they use abspath.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
inspect.getsourcefile()
函数正是您所需要的,它返回可以找到对象源的文件的相对路径。The
inspect.getsourcefile()
function is what you need, it returns the relative path to the file where the object's source can be found.如果您有权访问该模块,请尝试
module.__file__
。如果不这样做,类似这样的事情应该可以工作:
在这种情况下,我们使用可以在模块的字符串版本上调用 import 的事实,它返回实际的模块对象,然后调用
__file__ 就可以了。
If you have access to the module, try
module.__file__
.If you don't, something like this should work:
In this case, we are using the fact that import can be called on the string version of the module, which returns the actual module object, and then calling
__file__
on that.