簡體   English   中英

python無法從命令行寫入sqlite3 db

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM