我正在寫一個通用打印類:查找以前的功能的堆棧蟒蛇的路徑
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和Terminal。編輯編輯:哎呀!正如一篇博文所評論的,Ubuntu內置了Python IS CPython。我的錯。所以,我使用的CPython ...
看過這個問題,看起來你真的只想得到主要的文件路徑。因此,我投票關閉了[如何獲取Python中的\ _ \ _main \ _ \ _模塊的文件名?](http://stackoverflow.com/questions/606561/how-to-獲得文件名,最主模塊中,蟒蛇的)。請澄清你的問題,如果這不是你想要的。 – jpmc26 2015-02-10 00:19:18
我相信你需要'inspect.stack' – mgilson 2015-02-10 00:23:49
@ jpmc26不是。如果我有a.py調用b.py和b.py調用pprint.py,我想要的路徑是b.py,而不是a.py.他們可能完全不同。 – QuantumFool 2015-02-10 00:25:01