运行Python脚本后如何在指定目录cd终端?
我正在写一个简单的Python脚本,想用subprocess
和/或os
来执行一些命令,这个部分运行得很好。
不过,当脚本结束时,我希望能让实际的终端(在这个例子中是OS X)切换到新创建文件的目录,这样在退出后就可以直接使用这些文件。接下来提到的所有方法(subprocess.Popen
、os.system
、os.chdir
)都能在脚本内部做到我想要的(也就是说,它们可以在目标目录中执行命令),但是在退出时,终端却停留在脚本自己的目录,而不是目标目录。
我希望能避免为了实现这个目的而写一个临时的shell脚本,不知道这样是否可能?
3 个回答
1
你有没有试过直接在当前的命令行窗口运行这个程序呢?
也就是说,
$. script.py
而不是
$script.py
4
暂时不谈Python,任何子进程都无法改变它所调用的主命令行的状态。因此,你需要一种可以改变调用命令行状态的方式,这正是Paul Creasey所暗示的。
alias mycd="cd `echo $1`"
在这里,echo
可以用script_which_outputs_a_directory_name_on_stdout.py
来替代。这有点像是个小技巧,但至少这是个老技巧。
10
很遗憾,不可以。进程是不能改变它们父进程的环境的。在这个情况下,你的Python脚本是shell的子进程。你可以通过让Python进程启动一个新的shell来“假装”实现这个功能——也就是调用subprocess来打开一个shell进程,并把修改后的环境传递给用户,但这样做的缺点是会让Python进程一直运行下去。
这其实就是shell脚本的用途嘛.. :-) 显然,有人需要写一个更传统的shell(比如更接近Bash而不是IPython的那种),可以用Python作为它的脚本语言。