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

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

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

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

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


当前回答

我对__file__使用了这种方法 os.path.abspath (__file__) 但是有一个小技巧,它返回。py文件 当代码第一次运行时, 下一个运行的名称为*。佩克文件 所以我选择了: inspect.getfile (inspect.currentframe ()) 或 .f_code.co_filename sys._getframe ()

其他回答

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

我对__file__使用了这种方法 os.path.abspath (__file__) 但是有一个小技巧,它返回。py文件 当代码第一次运行时, 下一个运行的名称为*。佩克文件 所以我选择了: inspect.getfile (inspect.currentframe ()) 或 .f_code.co_filename sys._getframe ()

我觉得这个比较干净:

import inspect
print inspect.stack()[0][1]

得到的信息与:

print inspect.getfile(inspect.currentframe())

其中[0]是堆栈中的当前帧(堆栈的顶部),[1]是文件名,在堆栈中增加到向后,即。

print inspect.stack()[1][1]

将是调用当前帧的脚本的文件名。此外,使用[-1]将使您到达堆栈的底部,即原始调用脚本。

试试这个,

import os
os.path.dirname(os.path.realpath(__file__))

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

from pathlib import Path

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

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

current_path: Path = Path(__file__).parent.resolve()