【问题标题】:Why can't I change the current working directory?为什么我不能更改当前工作目录?
【发布时间】:2019-09-21 01:06:02
【问题描述】:

我正在尝试创建我的第一个 python 程序来删除d:\source 中的所有空目录。看来我现在的技能连目录都进不去:

import os
os.getcwd()
os.chdir("D:\\SOURCE")
os.getcwd()

我得到的只是……

D:\CODING\venv\Scripts\python.exe D:/CODING/tester.py

Process finished with exit code 0

它似乎没有改变工作目录,我该如何验证?为什么它根本不显示os.chdir("D:\\SOURCE") 或第二个os.getcwd() 命令的结果/错误?

【问题讨论】:

  • 这些命令都没有输出任何东西。试试:print(os.getcwd())
  • 无复制结束。
  • 如果这是你所期望的,它不会改变你的 shell 的工作目录。只有随后在您的脚本中的工作目录(如果您打印它,您应该看到它)。

标签: python python-3.x windows


【解决方案1】:

您的程序可能确实更改了目录。但是你看不到这个:

  • 仅仅os.getcwd() 不会做任何可见的事情:它检索当前工作目录并丢弃它。相反,你应该这样做print(os.getcwd())
  • 更改当前工作目录只会影响当前进程(即 Python 程序),但不会影响其父进程(命令提示符)。因此,您的命令提示符会保留其 cwd,并且不会从被调用程序继承该 cwd。

【讨论】:

  • 增加安全性后os.chdir("D:\\SOURCE") 会是什么样子?就像如果目录更改失败然后不要继续。
  • @Bricktop 让我们尝试一下:>>> os.chdir("doesn't exist") 导致异常OSError: [Errno 2] No such file or directory: "doesn't exist"。所以你用try:except OSError, e:包围它并检查e的属性。
  • 我了解除了e:e 属性部分之外的所有内容,但我有工作的条件。是否可以只为丢失的目录启动目录选择器窗口?
  • @Bricktop 嗯,基本上这是基本的exception handling,你必须查一下。当然可以启动选择器对话框:请参阅here
【解决方案2】:

您需要打印结果。

import os
print(os.getcwd())
os.chdir("D:\\SOURCE")
print(os.getcwd())

【讨论】:

    【解决方案3】:

    os.chdir() 不返回任何值。它只会更改目录。正如其他答案中所建议的,您可以使用

    打印/输出当前目录
    os.chdir("D:\\SOURCE") 
    print(os.getcwd())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2014-12-02
      • 2015-02-22
      相关资源
      最近更新 更多