相关疑难解决方法(0)

如何获取当前正在执行的文件的路径和名称?

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

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

  • script_1.py电话script_2.py.
  • 反过来,script_2.py打电话script_3.py.

我怎样才能获得的文件名和路径script_3.py,从内部代码script_3.py,而无需从传递这些信息作为参数script_2.py

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

python scripting file

462
推荐指数
16
解决办法
51万
查看次数

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

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

sys.argv中[0]

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

__文件__

这意味着使用path = os.path.abspath(os.path.dirname(__file__)),但我发现这不起作用:

  • py2exe没有__file__属性,但有一个解决方法
  • 从IDLE运行时execute()没有__file__属性
  • OS X 10.6我得到的地方 NameError: global name '__file__' is not defined

回答不完整的相关问题:

我正在寻找一个通用的解决方案,一个适用于所有上述用例的解决方案.

更新

这是测试用例的结果:

输出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
Run Code Online (Sandbox Code Playgroud)

a.py

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

print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print …
Run Code Online (Sandbox Code Playgroud)

python directory path

183
推荐指数
8
解决办法
12万
查看次数

ModuleNotFoundError:即使在破解 sys.path() 之后,也没有在 python 3 中命名的模块

我有这个文件结构:

/home/test
         ??? dirA
         ?   ??? ClassA.py
         ??? dirB
             ??? Main.py
Run Code Online (Sandbox Code Playgroud)

文件中有以下内容:

类A.py

class ClassA:
    def __str__(self):
        return 'Hi'
Run Code Online (Sandbox Code Playgroud)

主要.py

from dirA.ClassA import ClassA

class Main:

    def main():
        a = ClassA()

if __name__ == '__main__':
    Main.main()
Run Code Online (Sandbox Code Playgroud)

我将当前目录更改为:

$ cd /home/test/dirB
Run Code Online (Sandbox Code Playgroud)

这有效:

$ PYTHONPATH=/home/test python Main.py
Run Code Online (Sandbox Code Playgroud)

这不会:

$ python Main.py

Traceback (most recent call last):
  File "Main.py", line 1, in <module>
    from dirA.ClassA import ClassA
ModuleNotFoundError: No module named 'dirA'
Run Code Online (Sandbox Code Playgroud)

在 Main.py 中添加此行无效:

import os, sys
# Get the …
Run Code Online (Sandbox Code Playgroud)

python-3.x

5
推荐指数
1
解决办法
4799
查看次数

标签 统计

python ×2

directory ×1

file ×1

path ×1

python-3.x ×1

scripting ×1