在试图回答a question for another user,我碰到的东西,引起了我的好奇:脚本结束后可能更改目录并保持更改吗?
import os
os.chdir('..')
将尽可能的Python而言改变工作目录,所以如果我在/home/username/
,我跑os.chdir('..')
,任何后续代码将会像我在/home/
一样工作。例如,如果我再做:
import glob
files = glob.glob('*.py')
files
将在/home/
而非/home/username/
的.py
文件列表。但是,只要脚本退出,我将回到/home/username/
,或从最初运行脚本的任何目录中。
我发现shell脚本也会发生同样的情况。如果我有以下脚本:
#!/bin/bash
cd /tmp
touch foo.txt
从/home/username/
运行该脚本将在/tmp/
创建一个文件foo.txt
,但是当脚本完成后,我仍然会在/home/username/
不/tmp/
。
我很好奇,如果有一些根本原因在这些情况下,工作目录没有改变“永久”,如果有是的方式永久地改变它,例如,与~$ python myscript.py
运行一个脚本,当脚本完成执行时,脚本从不同的目录运行到终端。
这个假设每个运行这些脚本的用户都知道它最终会改变他们的shell目录,否则这种行为将会相当令人惊讶。 –
@MosesKoledoye我没有考虑到这一点。如果用户不知道发生了什么,确实会非常混乱和危险。我正在考虑用户想要并预期这种行为的情况。就像也许它是工作流程的一部分,在脚本运行后,他们需要在shell中执行一些操作,但是在另一个目录中,并且脚本为他们保存了必须在那里导航的步骤。 – elethan
我觉得在终端/工作区方面脚本应该更像沙箱,当然除了IO操作或引发异常外。好问题,认为*全*。 –