运行Python脚本后如何在指定目录cd终端?

5 投票
3 回答
2698 浏览
提问于 2025-04-15 22:31

我正在写一个简单的Python脚本,想用subprocess和/或os来执行一些命令,这个部分运行得很好。

不过,当脚本结束时,我希望能让实际的终端(在这个例子中是OS X)切换到新创建文件的目录,这样在退出后就可以直接使用这些文件。接下来提到的所有方法(subprocess.Popenos.systemos.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作为它的脚本语言。

撰写回答