我以如下方式运行脚本:
python3 tools/debug_tool.py
我在脚本内打印__file__
,没关系:
tools/debug_tool.py
但是os.path.realpath(__file__)
错误:
/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/Resources/tools/debug_tool.py
os.path.abspath(__file__)
的相同结果
为什么会这样?
os.path.realpath(__file__)
的预期结果是:
/Users/my_user/my_project/tools/debug_tool.py
此外,当我将文件保存到当前目录时,例如cv2.imwrite('temp.png', image)
,它也会将文件保存到/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/Resources/
由于某些原因os.getcwd()
:
/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/Resources
os.path.realpath
应该解析符号链接并返回规范路径:
返回指定文件名的规范路径,消除任何路径中遇到的符号链接(如果操作系统)。
注意,您还需要解析文件的目录:
os.path.realpath
如果您在不解析符号链接的情况下查找绝对路径,则需要使用os.path.realpath(os.path.dirname(__file__))
:
返回路径名路径的标准化绝对化版本。在大多数平台,相当于调用函数
os.path.abspath
为如下:os.path.abspath
。
normpath()
应生成所需的输出:
normpath(join(os.getcwd(), path))
如果上述方法均无效,则表示您当前的工作目录与您认为的不同。例如,如果您使用的是IDE,则可能值得检查当前的工作目录:
os.path.abspath(os.path.dirname(__file__))
我无法复制-为我工作。您没有发布正在运行的实际代码。我相对于/Users/my_user/my_project/tools/debug_tool.py
创建了一个名为tmp / d.py的文件,其内容如下:
print(os.getcwd())
在安装了Homebrew python3 $HOME
的情况下运行,会产生预期的输出:
import os
print("__file__: " + __file__)
print("realpath: " + os.path.realpath(__file__))
如果在您的系统上无法产生相同的输出,则说明某些东西严重损坏:-),但我怀疑您没有准确描述问题。