【发布时间】:2014-01-20 02:45:35
【问题描述】:
我有一个 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)
这不再产生错误。这是用于打开和读取 conf 文件的 basedir 分配函数,现在会导致错误。我尝试过使用 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'
【问题讨论】:
-
@LegoStormtroopr:我真的不认为这是重复的。这里的问题只是 OP 正在计算数据库文件的无效路径。它与 sqlite 无关。
标签: python command-line sqlite