我有一個 Python 腳本,可以在相對目錄中找到檔案。例如:Python 腳本位於/home/username/projectname/
.我有一個在 Python 腳本中調用的文件,該文件位於/home/username/projectname/subfolder
.
如果我從 shell 運行腳本,python scriptname.py
它運行得很好。
但是,我正在嘗試將該腳本作為啟動服務運行。我正在 webmin 中設置它,並且我相信它創建了一個 shell 腳本來調用它。透過啟動腳本,我正在執行類似的操作來呼叫腳本:
execute python home/username/projectname/scriptname.py
腳本啟動正常,但無法存取相對目錄中的檔案。
我猜有一種更好的方法可以從啟動腳本中呼叫Python程序,以便它知道相對路徑。
答案1
又快又髒:
在啟動腳本中,不要只執行 python 腳本,而是cd
先使用。
#!/bin/sh
cd /home/username/projectname &&
python ./scriptname.py
答案2
有幾種方法可以直接在 Python 腳本中解決這個問題。
如果您的腳本始終位於「/home/username/projectname/subfolder」中,您只需將其新增至 Python 內的搜尋路徑即可:
import sys sys.path.append("/home/username/projectname/subfolder")
但是,我懷疑您可能會將其放在多個“projectname”目錄中,因此更通用的解決方案如下所示:
import sys import os sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), "subfolder"))
這將找到 Python 腳本所在的目錄(在 中
sys.argv[0]
),提取目錄部分,將「子資料夾」附加到其上,並將其放入搜尋路徑中。請注意,某些作業系統可能只給予可執行檔名稱
sys.argv[0]
。對於這種情況,我沒有一個好的解決方案,也許其他人有。如果有相對路徑,您可能還需要os.path.abspath()
在其中註入一個調用sys.argv[0]
,但是稍微嘗試一下,您應該能夠讓它工作。與上面的答案類似,您可以讓 Python 腳本自行更改目錄,而不需要包裝器腳本:
import os os.chdir("/home/username/projectname")
答案3
一種更快、更髒的方法(使用子 shell):
( cd my/path/to/folder && python myprogram.py )
答案4
set PYTHONPATH=PROJECTPATH && python script.py