[英]python unable to write to sqlite3 db from command line
我有一個python腳本,該腳本從ds18b20傳感器讀取溫度並將其寫入位於同一目錄中的sqlite3 db。 寫入數據庫的代碼部分如下所示:
def write_DB(devID, devNAME, temp):
conn = sqlite3.connect('templog.db')
curs = conn.cursor()
curs.execute("INSERT INTO temps values((?),(?), datetime('now'), (?))", (devID, devNAME, temp))
conn.commit()
從idle3運行時,它運行良好,但是從命令行或cron運行時,輸出為:
~/python/HydroMon $ /usr/bin/python /home/pi/python/HydroMon/ds18b20_scanner.py
Traceback (most recent call last):
File "/home/pi/python/HydroMon/ds18b20_scanner.py", line 102, in <module>
scan_dev()
File "/home/pi/python/HydroMon/ds18b20_scanner.py", line 69, in scan_dev
write_DB(file, dev, temp)
File "/home/pi/python/HydroMon/ds18b20_scanner.py", line 49, in write_DB
curs.execute("INSERT INTO temps values((?),(?), datetime('now'), (?))", (devID, devNAME, temp))
sqlite3.OperationalError: unable to open database file
知道為什么它不能從命令行運行嗎? 所有權限均正確。
編輯:我將此添加到write_db()
global basedir
db_file = basedir + '/templog.db'
conn = sqlite3.connect(db_file)
這不再產生和錯誤。 這是basedir分配函數,用於打開和讀取conf文件,這現在會導致錯誤。 我已經嘗試使用python和python3了。
#Configuratio Directory
fullpath = sys.argv[0]
basedir = os.path.dirname(fullpath)
confdir = basedir + "/conf"
#Variable to check if scan was good
reading = 0
def get_dev_name(devID):
global confdir
devName = 'NONE'
#open conf file
conf = confdir + '/devname.conf'
print(conf)
cfile = open(conf,mode='r')
從idle3運行時,結果為:/home/pi/python/HydroMon/conf/devname.conf
從命令行運行時:
~/python/HydroMon $ sudo python3 ds18b20_scanner.py
/conf/devname.conf
Traceback (most recent call last):
File "ds18b20_scanner.py", line 105, in <module>
scan_dev()
File "ds18b20_scanner.py", line 70, in scan_dev
dev = get_dev_name(file)
File "ds18b20_scanner.py", line 27, in get_dev_name
cfile = open(conf,mode='r')
IOError: [Errno 2] No such file or directory: '/conf/devname.conf'
當您從命令行運行它時,請嘗試打印出sys.argv[0]
。 您可能會驚訝地發現它是ds18b20_scanner.py
,它使目錄名成為空字符串。
如果您要寫入與腳本相同的位置,則可能要使用__file__
而不是sys.argv[0]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.