如何在Python脚本内部查找正在运行的脚本的目录?

11

如何从Python [3.3]内部查找正在运行的Python脚本的目录?我尝试了如何找到脚本目录?中建议的方法,但我得到了“无效语法”并被引导到“os”(我确实导入了os)。

我最接近答案的方法是: sys.argv[0],但它仍然包括文件名,所以我不能使用它。还有其他方法吗?

建议的代码所在的部分为rundir = sys.argv[0]

import os, sys

rundir = sys.argv[0]
print("Running from" + rundir)

你能发布你的精确代码和错误信息吗?你链接的答案看起来应该适用于你。 - Emmett Butler
3个回答

43

获取包含当前正在运行模块的目录:

import os
path = os.path.dirname(os.path.realpath(__file__))

或者,如果你想要获得调用脚本的目录:

import os
path = os.getcwd()

根据文档:

__file__是加载模块的文件的路径名,如果它是从文件加载的。

根据脚本调用方式的不同,这可能是一个相对于os.getcwd()的路径,因此os.path.realpath(__file__)将把此转换为绝对路径(或者如果__file__已经是绝对路径则不执行任何操作)。然后,os.path.dirname()通过剥离文件名来返回完整目录。


你可以通过 Path(__file__).resolve().parent 获取一个 Path 对象。 - Tyler

1
这应该可以工作:

import os,sys
print(os.path.dirname(os.path.realpath(sys.argv[0])))

1

试试这个:

import os
os.path.dirname(__file__)

__file__获取当前文件的名称。 dirname函数获取当前文件所在的目录。

语法错误可能与print语句有关。在Python 3.x中,print语句的语法已更改。

print "hi"

是无效的。现在 print 是一个函数。

print("hi")

works. 你需要括号。


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