如何使我的程序具有一致的初始当前工作目录?

88
当我在IDLE中运行以下脚本时:
import os
print(os.getcwd())

我得到的输出为

D:\testtool

但是当我从命令提示符运行时,我会得到
c:\Python33>python D:\testtool\current_dir.py
c:\Python33

我怎样才能得到与使用IDLE时相同的结果?


这个问题的前提是错误的;os.getcwd()确实是获取当前工作目录的方法。问题在于运行脚本的方式会改变当前工作目录 - Karl Knechtel
换句话说,回答这个问题的直接方法是“不通过Python代码,而是**使用终端命令移动到D:\testtool,然后运行python current_dir.py”。 - Karl Knechtel
3个回答

123

看起来IDLE会将其当前工作目录更改为执行的脚本位置,而使用命令行运行脚本时不会这样做,它会将CWD保留为原样。

要将当前工作目录更改为包含您的脚本的目录,您可以使用:

import os
os.chdir(os.path.dirname(__file__))
print(os.getcwd())

__file__变量仅在从文件执行脚本时才可用,其中包含文件的路径。更多信息请参见此处:Python __file__ attribute absolute or relative?


1
我建议不要更改目录,因为如果用户希望从不同的目录运行脚本,则可能会得到非确定性的结果。 - Frederick Ollinger
我同意@FrederickOllinger的观点,没有必要更改目录。os.path.dirname(__file__)就足够了。 - Ashley Kleynhans

22
使用pathlib,您可以获取包含当前文件的文件夹。 __file__ 是从加载模块的文件的路径名。 参考资料:文档
import pathlib

current_dir = pathlib.Path(__file__).parent
current_file = pathlib.Path(__file__)

文档参考:链接


2
当前文件位置和当前工作目录不可以不同吗? - Stevoisiak
可以使用os.chdir(path)更改当前工作目录cwd。 将当前工作目录更改为路径。 https://docs.python.org/3/library/os.html#os-file-dir - Frederick Ollinger

11

Python的默认pathlib库提供了当前工作目录(cwd):

import pathlib

pathlib.Path.cwd()

2
太好了,我正在寻找pathlib库。 - muchtarsp

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