關于目前工作目錄是什麼以及其與子產品搜尋路徑的差別可以參見下文:
Python語言中目前工作目錄(Current Working Directory, cwd)與子產品搜尋第一路徑都是指什麼???
---------------------------------------------------------------
給出vscode中python項目的預設launch.json檔案内容:
{
// 使用 IntelliSense 了解相關屬性。
// 懸停以檢視現有屬性的描述。
// 欲了解更多資訊,請通路: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
}
]
}
可以看到預設的launch.json并沒有設定cwd,但是其實在預設設定下其等價于下面的設定:
{
// 使用 IntelliSense 了解相關屬性。
// 懸停以檢視現有屬性的描述。
// 欲了解更多資訊,請通路: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"cwd": "${fileDirname}"
}
]
}
在python中目前工作目錄為python代碼啟動時鍵入指令的所在的目錄,而在python中使用相對路徑對檔案進行讀存操作都是以目前工作目錄為起始路徑的。
預設情況下,在vscode的項目開發過程中目前工作目錄為啟動檔案所在目錄,也就是"cwd": "${fileDirname}" ,但是有時候(如子子產品測試時)我們的啟動檔案并不在項目的頂層目錄,此時為了確定目前工作目錄依舊為項目的頂層目錄我們可以在代碼中使用os.chdir函數來設定目前工作目錄,但是該種方式會破壞代碼結構,是以我們使用launch.json檔案中設定cwd會更為友善。
給出設定cwd為項目頂層目錄的launch.json檔案内容:
{
// 使用 IntelliSense 了解相關屬性。
// 懸停以檢視現有屬性的描述。
// 欲了解更多資訊,請通路: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"cwd": "${workspaceFolder}"
}
]
}
如此設定後不論啟動項目中的哪個檔案其目前工作目錄均為項目的頂層目錄,當然該種設定主要還是為了測試子子產品時使用的。