對於我的應用程序中的詳細調試消息,我正在使用返回有用前綴的函數。請看下面的例子:Python - 獲取完整包模塊名稱
import inspect
def get_verbose_prefix():
"""Returns an informative prefix for verbose debug output messages"""
s = inspect.stack()
module_name = inspect.getmodulename(s[1][1])
func_name = s[1][3]
return '%s->%s' % (module_name, func_name)
def awesome_function_name():
print "%s: Doing some awesome stuff right here" % get_verbose_prefix()
if __name__ == '__main__':
awesome_function_name()
此輸出:
test->awesome_function_name: Doing some awesome stuff right here
我的問題是:當我有一個模塊中的組件,例如 'myproject.utilities.input',從get_verbose_prefix
返回的模塊名稱仍然是「輸入」,而不是「myproject.utilities.input」。這大大減少了大型項目中前綴的有用性,因爲在不同的子模塊中可以有幾個「輸入」模塊一起工作。
所以我的問題是:是否有一種簡單的方法在Python的包中檢索完整模塊名稱?我計劃擴展get_verbose_prefix
函數以檢查模塊父目錄中的'__init__.py'文件,以推斷它的全名,但首先我想知道是否有更簡單的方法來完成它。
我想這是真的,但我如何才能從實際的模塊我的前綴函數的上下文? – Hubro 2012-07-28 22:25:04
沒關係,我想明白了:'inspect.getmodule(s [1] [0]).__ name__'。你也應該編輯'__name__'實際上並不總是返回模塊的全名,因爲它在執行的模塊上返回'__main__' – Hubro 2012-07-28 22:33:07
inspect.getmodule(s [1] [0])中的''' ).__ name__'? – 2017-06-22 05:27:19