python - 如何在 Python 中获取当前执行文件的路径?

这似乎是一个新手问题,但事实并非如此。一些常见的方法并不适用于所有情况:

sys.argv[0]

这意味着使用 path = os.path.abspath(os.path.dirname(sys.argv[0])),但是如果您从另一个 Python 脚本运行另一个目录,这可能发生在现实生活中。

__file__

这里的意思是使用path = os.path.abspath(os.path.dirname(__file__)),但是我发现这样不行:

  • py2exe 没有 __file__ 属性,但是有 a workaround
  • 当您从 IDLE 运行时execute() 没有 __file__ 属性
  • Mac OS X v10.6 (Snow Leopard) 我得到 NameError: global name '__file__' is not defined

答案不完整的相关问题:

  • Find path to currently running file
  • Path to current file depends on how I execute the program
  • How can I know the path of the running script in Python?
  • Change directory to the directory of a Python script

我正在寻找一种通用解决方案,它适用于上述所有用例。

更新

这是一个测试用例的结果:

python a.py 的输出(在 Windows 上)

a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz

b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz

a.py

#! /usr/bin/env python
import os, sys

print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print

execfile("subdir/b.py")

文件subdir/b.py

#! /usr/bin/env python
import os, sys

print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print

C:.
|   a.py
\---subdir
        b.py

最佳答案

首先需要从inspectos

导入
from inspect import getsourcefile
from os.path import abspath

接下来,无论您想从哪里找到源文件,只需使用

abspath(getsourcefile(lambda:0))

https://stackoverflow.com/questions/2632199/

相关文章:

python - 在 Python 中计算 Pearson 相关性和显着性

python - 如何将列表中的所有项目与 Python 相乘?

linux - Linux Ubuntu下启动时自动运行程序

python - 在 django Forms 中定义 css 类

linux - 单击选项卡时出现shell init问题,getcwd有什么问题?

mysql - 无法连接到 MySQL 服务器错误 111

linux - 如何确定进程是否在 lxc/Docker 内部运行?

python - 使用 Python 处理 csv 文件时如何跳过标题?

linux - 在 linux 中更改 VNC session 的分辨率

Linux - 仅安装 redis-cli