我有脚本调用其他脚本文件,但我需要获得当前在进程中运行的文件的文件路径。

例如,假设我有三个文件。使用execfile:

Script_1.py调用script_2.py。 反过来,script_2.py调用script_3.py。

如何从script_3.py内的代码中获得script_3.py的文件名和路径,而不必将该信息作为script_2.py的参数传递?

(执行os.getcwd()返回初始脚本的文件路径,而不是当前文件的文件路径。)


当前回答

下面返回当前主脚本所在的路径。我用Linux、Win10、IPython和Jupyter Lab进行了测试。我需要一个解决方案,工作于本地Jupyter笔记本电脑以及。

import builtins
import os
import sys

def current_dir():
    if "get_ipython" in globals() or "get_ipython" in dir(builtins):
        # os.getcwd() is PROBABLY the dir that hosts the active notebook script.
        # See also https://github.com/ipython/ipython/issues/10123
        return os.getcwd()
    else:
        return os.path.abspath(os.path.dirname(sys.argv[0]))

其他回答

import sys

print sys.path[0]

这将打印当前执行脚本的路径

print(__file__)
print(__import__("pathlib").Path(__file__).parent)

您所说的“当前在进程中运行的文件的文件路径”是什么意思并不完全清楚。 sys。argv[0]通常包含被Python解释器调用的脚本的位置。 查看sys文档了解更多详细信息。

正如@Tim和@Pat Notz指出的那样,__file__属性提供了对

模块所在的文件 加载,如果是从文件中加载的

由于Python 3是相当主流的,我想包含一个pathlib的答案,因为我相信它现在可能是一个更好的访问文件和路径信息的工具。

from pathlib import Path

current_file: Path = Path(__file__).resolve()

如果你正在寻找当前文件的目录,只需在Path()语句中添加.parent即可:

current_path: Path = Path(__file__).parent.resolve()
import os
os.path.dirname(os.path.abspath(__file__))

不需要检查或任何其他图书馆。

当我必须导入一个脚本(从与执行脚本不同的目录)时,这对我有用,它使用了与导入脚本位于同一文件夹中的配置文件。