从Python脚本中更改目录:如何不打开一个新的shell

11 浏览
0 Comments

从Python脚本中更改目录:如何不打开一个新的shell

我有以下的代码片段:\n

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

\n这是我写的一个脚本的一部分,用于标记我经常在终端中访问的文件夹。脚本的一部分会(cd)到标记的目录。我使用以下方式:\n

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

\n但是,我不喜欢的是会创建一个新的bash shell,所以当我需要注销时,我必须多次按下CTRL+D。\n问题是,我能否在不创建新的shell的情况下改变目录?在Python 2.4中是否有可能使用现有的模块,还是我需要升级到更高版本?\n编辑:我的问题更类似于这个问题:\n

\nChange directory of a parent process from a child process\n

0
0 Comments

问题的原因是,Python脚本在子进程中运行,无法修改父进程的当前目录。最简单的解决方法是使用一个函数来实现。将以下代码放入一个名为bk.sh的文件中:

bk() {
    dir="/home/user/somewhere"
    # equivalent to "if os.path.isdir(dir): os.chdir(dir)"
    [[ -d $dir ]] && cd "$dir"
}

然后执行以下命令来编译和加载该函数:

. bk.sh

接下来,只需在需要更改目录的时候使用bk命令即可。函数与脚本的不同之处在于,它在当前进程中运行,而不创建新的shell。

最终,我使用了这个方法来解决我的Python脚本的问题。我的脚本在第一次调用时将这个函数写入了.bashrc文件。我还在函数中添加了以下代码:dir=`bk.py show $1`。这样,函数会获取列表中的目录句柄,并将当前目录更改为该目录。

0