如何找到脚本所在的目录?

670

请考虑以下Python代码:

import os
print os.getcwd()

我使用os.getcwd()获取脚本文件的目录位置。当我从命令行运行脚本时,它会给出正确的路径,但是当我从Django视图中的代码运行它时,它会打印/

如何在由Django视图运行的脚本中获取脚本的路径?

更新:
总结到目前为止的答案 - os.getcwd()os.path.abspath()都会给出当前工作目录,可能不是脚本所在的目录。在我的Web主机设置中,__file__只提供文件名而没有路径。

在Python中难道没有一种(始终)能够接收脚本所在路径的方法吗?


2
你应该更仔细地阅读那篇链接的文章。它从未建议使用getcwd来获取脚本的位置,而是建议使用argv[0]dirnameabspath - Rob Kennedy
@Rob - 在我的 Web 主机上,仅使用“print sys.argv [0]”将只提供文件名,而不包括路径。 - Jonathan Livni
@Rob - 这是来自链接文章的摘录:"os.getcwd() 返回当前工作目录。" - Jonathan Livni
9
是的,但当前工作目录与您的脚本所在目录没有任何关系。与os.chdir相比,该命令用于设置当前工作目录;它不会将您的脚本文件移动到硬盘驱动器上的新位置。初始工作目录可能与您的脚本所在目录相同,但并不总是这样;该文章甚至进行了演示。 - Rob Kennedy
2
请注意,__file__将返回脚本上下文的文件名。如果您从__main__调用外部脚本,则应该谨慎小心 - 您可能会得到与预期不同的响应。 - user559633
@jfs?重复的是哪篇文章?SO.UI允许您在将某些内容标记为重复时指定链接吗? - Jesse Chisholm
12个回答

0

试试这个:

def get_script_path(for_file = None):
    path = os.path.dirname(os.path.realpath(sys.argv[0] or 'something'))
    return path if not for_file else os.path.join(path, for_file)

0
import os
exec_filepath = os.path.realpath(__file__)
exec_dirpath = exec_filepath[0:len(exec_filepath)-len(os.path.basename(__file__))]

2
为什么不使用os.path.dirname? - SpoonMeiser
我不知道os.path.dirname,也许那个也可以。 - Stan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接