Python OS在导入的模块上获取当前文件名

时间:2015-02-05 01:55:38

标签: python

我正在尝试编写一个可以反复使用的日志记录模块。记录不是问题。我想从任何脚本调用我的日志记录模块,而不必传递日志文件的参数。

如果我有一个名为mytest.py的测试脚本,我将如何在导入日志记录模块中返回此名称。我在日志记录脚本本身尝试了这个,但是它返回了该文件的名称而不是我想要记录的文件。

my_test.py:

from my_logger  import logging

info.logging("something here")
print("something here")

if __name__ == "__main__":
    logging()

我希望日志文件名为my_test.log,但目前它被命名为logging.log

以下是日志记录脚本中的部分:

def logging(filename=False, level=DEFAULT_LOG_LEVEL):
    if filename is False:
        file_ext = os.path.basename(__file__) # Need this to be my_test.py
        filename = ("C:/Users/Logs/{0}").format(file_ext)
        "Start logging with given filename and level."
        #print(filename)
        logging.basicConfig(filename=filename, level=LEVELS[level])
    else:
        "Start logging with given filename and level."
        logging.basicConfig(filename=filename, level=LEVELS[level])

2 个答案:

答案 0 :(得分:1)

假设您的编译器是CPython(感谢Matthew Trevor );

您可以使用inspect.getouterframes获取来电者的信息框,以及文件名和行号等。

import inspect

def logging(filename=False, level=DEFAULT_LOG_LEVEL):
    if filename is False:
        caller_file = inspect.getouterframes(inspect.currentframe())[1][3] 
        # prints /home/foo/project/my_test.py
    ...

答案 1 :(得分:0)

您在__file__函数中使用的logging绑定将保存其范围内的文件的值。您需要传入调用模块的__file__以获取所需的行为:

# my_test.py

...

if __name__ == "__main__":
    logging(__file__)

我很惊讶您的日志文件名为logging.log而不是my_logger.log,因为这是定义logging函数的文件的名称。