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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (662)

有些常见的方法并非在所有情况下都有效:

sys.argv0

这意味着使用path = os.path.abspath(os.path.dirname(sys.argv[0]))

下面是一个测试案例的结果:

pythona.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

比如

#! /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")

输出

#! /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))
用户回答回答于

无法直接确定正在执行的主脚本的位置。毕竟,有时候脚本根本就不是来自一个文件。

def we_are_frozen():
    # All of the modules are built-in to the interpreter, e.g., by py2exe
    return hasattr(sys, "frozen")

def module_path():
    encoding = sys.getfilesystemencoding()
    if we_are_frozen():
        return os.path.dirname(unicode(sys.executable, encoding))
    return os.path.dirname(unicode(__file__, encoding))

path/main.py:

import module_locator
my_path = module_locator.module_path()

如果不同目录中有多个主脚本,则可能需要多个模块副本

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动