当前位置: 首页 > 面试题库 >

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

乐正宜人
2023-03-14
问题内容

似乎是一个新手问题,但事实并非如此。一些通用方法并非在所有情况下都有效:

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-查找正在运行的文件的路径

  • 当前文件的路径取决于我如何执行程序
  • 如何知道Python中正在运行的脚本的路径?
  • 将目录更改为Python脚本的目录

我正在寻找一种通用解决方案,该解决方案可以在所有上述用例中使用。

更新资料

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

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

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

问题答案:

你无法直接确定正在执行的主脚本的位置。毕竟,有时脚本根本不是来自文件。例如,它可能来自交互式解释器或仅存储在内存中的动态生成的代码。

但是,由于总是从文件加载模块,因此你可以可靠地确定模块的位置。如果使用以下代码创建模块并将其与主脚本放置在同一目录中,则主脚本可以导入模块并使用该模块定位自身。

some_path / module_locator.py:

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))

some_path / main.py:

import module_locator
my_path = module_locator.module_path()

如果你在不同目录中有多个主脚本,则可能需要一个以上的module_locator副本。

当然,如果你的主脚本是由其他一些工具加载的,而这些工具却不允许你导入与脚本位于同一位置的模块,那么你很不走运。在这种情况下,你所需要的信息根本就不在程序中任何地方。最好的选择是向工具作者提交错误。



 类似资料:
  • 问题内容: 我有调用其他脚本文件的脚本,但是我需要获取该进程中当前正在运行的文件的文件路径。 例如,假设我有三个文件。使用: 来电。 调用。 我怎样才能获得的文件名和路径,从内部代码,而无需从传递这些信息作为参数? (执行将返回原始启动脚本的文件路径,而不是当前文件的路径。) 问题答案: p1.py: p2.py:

  • 问题内容: 我在代码中的某个地方遇到了异常,但是可以在应用程序启动时安全地导入相同的模块。我很好奇,看看Python寻找要导入模块的路径,以便我能够追踪为什么会出现此问题。我找到了这个: 这是系统在尝试导入模块时查找的所有路径的列表吗? 问题答案: python默认检查的路径位置可以通过check检查。

  • 问题内容: 我想获取当前文件的目录路径。我试过了: 但是,如何检索目录的路径? 例如: 问题答案: Python 3 对于正在运行的脚本的目录: 对于当前工作目录: 对于正在运行的脚本的目录: 如果你的意思是当前工作目录: 请注意,前后分别是两个下划线,而不仅仅是一个。 另请注意,如果你正在交互运行或已从文件以外的内容(例如数据库或在线资源)中加载了代码,则可能不会设置,因为没有“当前文件”的概念

  • 我需要得到当前路径的url在路由更改和基于值我想做条件渲染 这是我的代码,我没有继续的想法。 所以我需要做的是: 对于每个更改,我需要更新的值,并进行条件渲染,并将该值(路径)作为

  • 我尝试了堆栈溢出的大部分答案,它们给出了我的.java文件不存在的路径。如何获取我的文件实际存在或存在的路径? 假设我的java文件名为,其位置为。所以我想打印路径。 我将文件部署到某个服务器,然后在那里运行它,无论我想打印路径,我都会得到这样的位置,其中没有文件。

  • 问题内容: 在实现持久性底部栏时,单击底部栏中的按钮时,需要恢复以前的路线。 单击底部栏中的按钮时,将保存其当前路径路径(/ a / b / c ),并根据该按钮单击恢复先前保存的路径。 从概念上讲,用户会将每个按钮视为一个工作区,并且其状态永远不会丢失(包括后退堆栈)。用户可以安全地从一个工作区切换到另一个工作区。 当路由重绕到根时,如何在Flutter中获取当前路由路径? 问题答案: 不会公开