Я пытаюсь отслеживать, какие задачи необходимо выполнить с помощью таблицы relStack. Этот скрипт примет аргумент и поместит его в таблицу в виде строки. Когда я запускаю скрипт, он выдает ошибку, в которой говорится, что relStack является базой данных только для чтения. Я не наложил на него никаких ограничений, поэтому он должен быть доступен для записи. Код здесь (много комментариев):
#!/usr/bin/python
import sys
import subprocess
import sqlite3
# This allows this script to interact with the "Database" (the relay.db file)
DB = sqlite3.connect("/home/pi/Documents/relay.db")
# Using the cursor will allow the script to execute SQLite commands/statements
csr = DB.cursor()
# Getting the names of all items in the "stack"
c = csr.execute("SELECT Name FROM relStack").fetchall()
# Checks if the script is being imported or ran as a program
if __name__ == "__main__":
# sys.argv[1] stands for the first argument/parameter that is entered when
# the script is called
a = sys.argv[1]
# Checking if the stack is empty. If so, then the execution script is called
# because it would've finished running and we will have to call it again in
# order for it to work
if (str(c) == "[]"):
# This adds a "request" into the stack, so the execution script knows
# which relay to toggle
addReq = csr.execute("INSERT INTO relStack VALUES(\"" + str(a) + "\")")
# Calling the execution script
subprocess.Popen("sudo python /home/pi/Documents/trigger.py", shell = True)
else:
# Adding "request" to stack
addReq = csr.execute("INSERT INTO relStack VALUES(\"" + str(a) + "\")")
На первый взгляд, похоже, в этом нет ничего плохого. Я что-то пропустил?