从 python 脚本更改目录:如何不打开新的 shell

Changing directory from a python script: how to not open a new shell

我有如下一段代码:

import os

unixshell=os.environ["SHELL"]
dir="/home/user/somewhere"
if os.path.isdir(dir):
    os.chdir(dir)
    os.system(unixshell)

这是我在终端中为我经常访问的书签文件夹编写的脚本的一部分。脚本的一部分进入(cd)到书签目录。我的使用方式如下

~/olddir$ bk.py go [handle to bookmarked directory]
~/bookmarkeddir$

但是,我不喜欢的是创建了一个新的 bash shell,所以当我需要注销时,我必须多次按 CTRL+D

问题是,我可以在不创建新目录的情况下更改目录吗 shell?这可能使用 python 2.4 中存在的模块,还是我需要升级到更高版本?

编辑:我的问题与这个问题比较重复:

问题是 python 在子进程中运行,它 "can't" 改变了 parent 的当前目录(我说 "can't",但可能有一些调试器可以做到这一点 - 不要去那里!)。

最简单的解决方案是改用函数。例如:

bk() {
    dir="/home/user/somewhere"

    # equivalent to "if os.path.isdir(dir): os.chdir(dir)"
    [[ -d $dir ]] && cd "$dir"
}

将其放入名为 bk.sh 的文件中(例如)。

要编译和加载函数,请执行以下操作:

. bk.sh

然后在您想要更改目录时使用 bk

与函数不同的是,它运行在当前进程中,不会创建新的shell。