cd是用于更改工作目录的shell命令。
如何更改Python中的当前工作目录?
cd是用于更改工作目录的shell命令。
如何更改Python中的当前工作目录?
当前回答
import os
abs_path = 'C://a/b/c'
rel_path = './folder'
os.chdir(abs_path)
os.chdir(rel_path)
您可以将两者与os.chdir(abs_path)或os.chdir(rel_path)一起使用,不需要调用os.getcwd()来使用相对路径。
其他回答
进一步了解Brian指出的方向,并基于sh(1.0.8+)
from sh import cd, ls
cd('/tmp')
print ls()
os.chdir()是cd的Python版本。
Path中的Path对象(PyPI上提供的第三方包,不同于pathlib)为此提供了上下文管理器和chdir方法:
from path import Path # pip install path
with Path("somewhere"):
...
Path("somewhere").chdir()
您可以通过以下方式更改工作目录:
import os
os.chdir(path)
使用此方法时,需要遵循两个最佳实践:
捕获无效路径上的异常(WindowsError、OSError)。如果抛出异常,请不要执行任何递归操作,尤其是破坏性操作。他们将在旧的道路上运行,而不是在新的道路上。完成后返回到旧目录。这可以通过将chdir调用包装在上下文管理器中以异常安全的方式完成,就像BrianM.Hunt在回答中所做的那样。
在子流程中更改当前工作目录不会更改父流程中的当前工作目录。Python解释器也是如此。不能使用os.chdir()更改调用进程的CWD。
正如其他人已经指出的那样,上述所有解决方案只会更改当前流程的工作目录。当您退出返回Unix shell时,这将丢失。如果你绝望了,你可以用这个可怕的黑客来改变Unix上的父shell目录:
def quote_against_shell_expansion(s):
import pipes
return pipes.quote(s)
def put_text_back_into_terminal_input_buffer(text):
# use of this means that it only works in an interactive session
# (and if the user types while it runs they could insert characters between the characters in 'text'!)
import fcntl, termios
for c in text:
fcntl.ioctl(1, termios.TIOCSTI, c)
def change_parent_process_directory(dest):
# the horror
put_text_back_into_terminal_input_buffer("cd "+quote_against_shell_expansion(dest)+"\n")