【问题标题】:How to get the caller script full path in Python如何在 Python 中获取调用者脚本的完整路径
【发布时间】:2019-09-17 11:05:44
【问题描述】:

我有一个调用者脚本 /home/x/a/a.py 使用模块 /home/x/b.py

在b.py里面,我想知道调用者脚本的完整路径,即/home/x/a/a.py。我怎样才能得到它?

我查看了How to get the caller script name,但它只给了我脚本名称,即 a.py

【问题讨论】:

标签: python


【解决方案1】:

一个非常简化的版本(用于 CPython 解释器):

每次在 Python 中调用方法时,都会向堆栈添加一个“帧”,在方法返回某些内容后,解释器会从堆栈中弹出最后一帧并继续执行前一帧,并使用注入的返回值代替方法调用

要获取前一帧,您可以调用sys._getframe(1)(0 将获取当前帧,1 将获取前一帧)。检查模块提供了一个方法getframeinfo,它返回一些关于框架的有用信息,包括文件名。可以这样组合

import inspect
import sys

def foo():
    print('Called from', inspect.getframeinfo(sys._getframe(1)).filename)

每当foo被调用时,它都会打印出调用方法的文件名

【讨论】:

  • 这只会给我调用者的文件名,但我需要完整路径。有可能吗?
  • 这将为您提供工作目录的相对路径。您应该能够将它们结合起来以获得绝对路径:import osos.path.join(os.getcwd(), filename)
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 2011-01-28
  • 2010-09-10
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多