如何获取正在运行的 Python 脚本的路径? [复制]
Posted
技术标签:
【中文标题】如何获取正在运行的 Python 脚本的路径? [复制]【英文标题】:How do I get the path of the Python script I am running in? [duplicate] 【发布时间】:2010-10-10 08:47:43 【问题描述】:重复:In Python, how do I get the path and name of the file that is currently executing?
如何获取我正在运行的 Python 脚本的路径?我在做dirname(sys.argv[0])
,但是在 Mac 上我只得到文件名 - 而不是我在 Windows 上做的完整路径。
无论我的应用程序是从哪里启动的,我都想打开与我的脚本文件相关的文件。
【问题讨论】:
杰夫好像忘记了不是所有的python脚本都是模块,请提名重开。 @sorin 哦,但他们是;可以为任何脚本文件创建module
对象。仅仅因为某些东西从未真正得到import
ed 并不能使它“不是一个模块”。无论如何,答案是相同的:将脚本视为一个模块(如果确实需要,请使用某种引导程序),然后应用相同的技术。
是的,脚本是一个模块,但是这个问得好问题应该重新打开。这里没有回答,“重复”问题不是重复的,因为它只回答了如何获取您已加载的模块的位置,而不是您所在的模块。
在***.com/questions/50499/…查看“导入检查”解决方案
@acidzombie24 你不需要完整路径来打开和操作目录中的文件。例如,您可以使用open('images/pets/dog.png')
,而 Python 将执行其他操作。
【参考方案1】:
import os
print os.path.abspath(__file__)
【讨论】:
谢谢。这将获得编写代码的 .py 文件的路径,这就是我想要的,即使 OP 想要另一个路径。 这应该与其他答案中的信息相结合:os.path.abspath(os.path.dirname(__file__))
将给出目录。【参考方案2】:
潜入 Python 的 7.2:Finding the Path。
import sys, os
print('sys.argv[0] =', sys.argv[0])
pathname = os.path.dirname(sys.argv[0])
print('path =', pathname)
print('full path =', os.path.abspath(pathname))
【讨论】:
我喜欢你的回答如何显示 python 的许多不同变体和功能来解决问题。 如果您通过另一个目录中的另一个脚本调用该脚本,则此不起作用。 这可能是我们应该告诉作者的。 @SorinSbarnea 查看问题的主题:获取 running 脚本(已执行的脚本)的路径。import
ed 模块只是一种资源。
这个问题不是很清楚,但你的解决方案只有在脚本开头调用它才有效(以确保没有人更改当前目录)。我倾向于改用检查方法。 “运行脚本”不一定与“调用脚本”(入口点)或“当前运行脚本”相同。【参考方案3】:
如果你甚至有相对路径名(在这种情况下它似乎是./
),你可以打开相对于你的脚本文件的文件。我使用 Perl,但可以应用相同的通用解决方案:我将目录拆分为一组文件夹,然后将 pop
关闭最后一个元素(脚本),然后将 push
(或者对你来说,append
)放在任何位置我想要,然后再次加入他们,然后 BAM!我有一个工作路径名,它准确地指向我期望它指向的位置,相对或绝对。
当然,如发布的那样,还有更好的解决方案。我只是有点喜欢我的。
【讨论】:
在 python 中,如果您从完全不同的路径调用脚本,则这不起作用,例如如果你在~
并且你的脚本在/some-path/script
你会得到./
等于~
而不是/some-path
他问的(我也需要)
问题是如何获取模块的路径,而不是如何从另一个构建一个路径名【参考方案4】:
使用它来获取当前文件的路径。它将解析路径中的任何符号链接。
import os
file_path = os.path.realpath(__file__)
这在我的 Mac 上运行良好。它在 Python 解释器中不起作用(您需要执行 Python 文件)。
【讨论】:
不太确定,这里是 OSX 10.6NameError: global name '__file__' is not defined
的结果
Sorin:也许你试过shell中的表达式?
在调用realpath
之前创建一个chdir
并且真实路径将失败,这不是答案。
NameError: global name '__file__' is not defined
错误只是表示您忘记了import os
。
NameError: __file__
... 我已经导入了os
。不知道为什么这是公认的答案..?【参考方案5】:
如果您打算使用 py2exe 编译脚本,则可接受的解决方案将不起作用。如果您打算这样做,这是等效的功能:
os.path.dirname(sys.argv[0])
Py2exe 不提供__file__
变量。供参考:http://www.py2exe.org/index.cgi/Py2exeEnvironment
【讨论】:
不幸的是,正如 OP 所说,这在 Mac 上不起作用。请参阅sys.argv:这是否是完整路径名取决于操作系统 (获得真正的跨浏览器解决方案非常复杂......) @Stefano 这不是问题。要确保它是绝对(完整)路径名,请使用os.path.abspath(...)
当我使用 jupyter notebook 时,这并没有给出感兴趣的 .py 文件的位置以上是关于如何获取正在运行的 Python 脚本的路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章