2012-05-02 104 views
8

我正在設置我的第一個cron作業,但它不起作用。我認爲這個問題可能是一個相對路徑問題。由cron作業執行的腳本中的相對路徑

鑑於cron作業:

*/1 * * * * python2.7 /home/path/to/my/script/my_script.py 

和my_script.py:

import sqlite3 
db = sqlite3.connect('my_db.db') 
cur = db.cursor() 
... 

如何確保my_script.py尋找my_db.db/home/path/to/my/script/(容納my_script.py相同的目錄),而不是什麼目錄crontab的生活?

其他有關故障排除的建議也很受歡迎。

注 - 我認爲這個問題可能是一個路徑問題,因爲當我嘗試使用python2.7 /home/path/to/my/script/my_script.py從比/home/path/to/my/script/以外的任何位置運行my_script.py,我得到一個「無法打開數據庫」的錯誤。

回答

12
import sqlite3 
import os 

dir_path = os.path.dirname(os.path.abspath(__file__)) 

db = sqlite3.connect(os.path.join(dir_path, 'my_db.db')) 
cur = db.cursor() 
... 

請記住,Python的os.path module是操縱路徑時最好的朋友。使用CHDIR將允許執行你的本地目錄的腳本,讓你把所有的局部引用保持不變,如果你有一個以上的就可以節省

os.chdir(os.path.dirname(os.path.abspath(__file__))) 
db = sqlite3.connect('my_db.db') 

+1

謝謝!這種方法使我能夠使用'python2.7 /home/path/to/my/script/my_script.py'運行我的腳本,這非常棒。但是,cron作業仍然無法正常工作,所以我需要繼續進行故障排除。我想好消息是我已經消除了一個理論,並瞭解了os.path。再次感謝。 –

1

你可能想以不同的方式做到這一點你有一段時間:)