python – 可以更改目录并在脚本完成时保持更改?

在试图回答
a question for another user时,我遇到了激起我好奇心的事情:

import os
os.chdir('..')

就Python而言,将改变工作目录,所以如果我在/ home / username /中,并运行os.chdir(‘..’),任何后续代码都会像在/ home /中一样工作.例如,如果我这样做:

import glob
files = glob.glob('*.py')

文件将是/ home /中的.py文件列表,而不是/ home / username /中的.py文件列表.但是,一旦脚本退出,我将返回/ home / username /,或者从最初运行脚本的目录.

我发现shell脚本也发生了同样的事情.如果我有以下脚本:

#!/bin/bash

cd /tmp
touch foo.txt

从/ home / username /运行脚本将在/ tmp /中创建一个文件foo.txt,但是当脚本完成后,我仍然会在/ home / username / not / tmp /中.

我很好奇是否有一些根本原因导致工作目录在这些情况下不会“永久”更改,并且如果有办法永久地更改它,例如,使用〜$python myscript.py运行脚本,并且当脚本完成执行时,脚本从最终运行到另一个目录的终端.

最佳答案 没有办法做到这一点,因为调用Python或bash将在他们自己的上下文中运行所有内容(在脚本结束时结束).

您可以通过使用source来实现这些结果,因为它实际上将在当前shell中执行您的(shell)脚本.即,使用source foomaker.bash而不是bash foomaker.bash调用您的示例脚本

点赞