在試圖回答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操作或引發異常外。好問題,認爲*全*。 –