在堆栈python上查找上一个函数的路径



我正在编写一个通用打印类:

from __future__ import division
import os.path
class pprint:
    def __init__(self, name, path=None):
        self.name = name
        if path == None:
            #Where we define the path
            ???
        self.path = path
        self.complete_name = os.path.join(path, name)
        self.f = open(complete_name, "w")
    def __call__(text):
        self.f.write(text + "n")
        print text

构造函数采用要写入的文件的名称和包含该文件路径的可选参数。如果用户没有指定路径,我希望它写入调用程序的目录。我唯一不知道如何做的是后一个条件:如果没有指定路径,则假设该路径是调用函数的路径
我该如何找到答案?本质上,我想查看python函数堆栈,找出调用pprint的函数,找到该文件的路径,然后将path设置为该文件的地址。I、 但是,对python函数堆栈的工作原理一无所知。我该怎么做
谢谢

编辑:我不想要__main__文件的路径。如果我让a.py调用b.pyb.py调用pprint.py,我不想要a.py的路径。CCD_ 9和CCD_。

第二版:我使用的是Python 2.7.6。如果相关的话,我使用的是Ubuntu 14.04。我使用内置的东西,并附加一些其他东西,如numpy、scipy、pylab等。我没有IDE。我使用vim和Terminal。编辑:哇!正如一篇帖子评论的那样,Ubuntu内置了python IS CPython。我的坏。所以,我正在使用CPython。。。

您可以使用inspect.getouterframes来获取调用方的帧,以及文件名和行号等。

from __future__ import division
import inspect
import os.path
class pprint(object):
    def __init__(self, name, path=None):
        self.name = name
        if path == None:
           path = inspect.getouterframes(inspect.currentframe())[1][3] 
        self.path = path
        self.complete_name = os.path.join(path, name)
        self.f = open(complete_name, "w")
        ...

我假设您使用的是Python 2.7CPython或Jython

最新更新