从python脚本更改目录:如何不打开新shell
我有以下代码:从python脚本更改目录:如何不打开新shell,python,bash,shell,os.path,Python,Bash,Shell,Os.path,我有以下代码: 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 direct
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$
但是,我不喜欢的是创建了一个新的bashshell,所以当我需要注销时,我必须按CTRL+D
多次
问题是,我可以在不创建新shell的情况下更改目录吗?使用Python2.4中存在的模块是否可以实现这一点,或者我是否需要使用更高版本
编辑:我的问题与此问题更为重复:
问题是
python
在子进程中运行,并且它“不能”更改父进程的当前目录(我说“不能”,但可能有一些调试器可以做到这一点-不要去那里!)
最简单的解决方案是使用函数。例如:
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。为什么需要
os.system(unixshell)
命令os.chdir(dir)
本身就可以了。您需要创建一个bash函数并更改函数中的目录。该函数可以使用外部工具(如python脚本)来确定要更改到哪个目录。@l'l'l我从终端运行命令,运行python脚本后,该目录应该是我标记的目录。目标是改进我在终端中的导航。问题是这个脚本打开了一个新的bash shell。我想要相同的功能,但不需要通过此脚本从旧的shell打开新的bash shell。哦,我明白了,您可能需要接受n.m.的建议并执行类似的操作:,或者。我可能会这样做,但只是带着悲伤,因为我的python脚本看起来很不错。@Magicsowon:一般来说,在bash中执行bash操作会更好,而在pythonI中执行python操作最终会在我的python脚本中使用此解决方案。我的脚本在第一次调用该函数时将其写入.bashrc。我还在函数中添加了这个:dir=`bk.pyshow$1`
。这样,该函数将处理我列表中的目录和该目录的cd。