查找上一个函数在栈上的路径python
Find the path of the previous function on the stack python
我正在写一个通用打印 class:
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
设置为该文件的路径.但是,我对 python 函数堆栈的工作原理一无所知。我该怎么做?
谢谢!
编辑:我不需要 __main__
文件的路径。如果我有 a.py
调用 b.py
和 b.py
调用 pprint.py
,我不需要 a.py
的路径。 a.py
和 b.py
的路径可能完全不同。
编辑 2:我正在使用 Python 2.7.6。如果相关的话,我在 Ubuntu 14.04。我使用内置的东西,附加了一些其他东西,如 numpy、scipy、pylab 等。我没有IDE。我使用 vim 和终端。编辑编辑:哎呀!正如一位 post 评论的那样,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.7 和 CPython 或 Jython.
我正在写一个通用打印 class:
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
设置为该文件的路径.但是,我对 python 函数堆栈的工作原理一无所知。我该怎么做?
谢谢!
编辑:我不需要 __main__
文件的路径。如果我有 a.py
调用 b.py
和 b.py
调用 pprint.py
,我不需要 a.py
的路径。 a.py
和 b.py
的路径可能完全不同。
编辑 2:我正在使用 Python 2.7.6。如果相关的话,我在 Ubuntu 14.04。我使用内置的东西,附加了一些其他东西,如 numpy、scipy、pylab 等。我没有IDE。我使用 vim 和终端。编辑编辑:哎呀!正如一位 post 评论的那样,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.7 和 CPython 或 Jython.