【发布时间】:2023-01-24 13:49:33
【问题描述】:
我有一个 python 代码,其中包含名为 pythontut.db 的数据库文件(.py 和 db 文件位于同一文件夹中)。我使用 OS.path 进行路径设置。当它在 thonny 中执行时它工作正常,我创建了一个 systemd 服务以在重新启动时运行。但在重新启动时,路径不同并抛出“无法打开数据库”错误。
我试过像这样在pi-main.py中设置路径
dbname = 'pythontut.db'
scriptdir = os.getcwd()
db_path = os.path.join(scriptdir, dbname)
print(db_path)
它像这样在 thonny 中显示输出(Python 文件和数据库在同一个文件夹中)
/home/pi/pi-project/pythontut.db
但是当它通过systemd服务运行时,它会抛出这样的位置,无法打开数据库错误
/pythontut.db
我怀疑这是路径错误还是权限错误。可能如果有另一种路径设置方法。
系统文件:
[Unit]
Description=Main Jobs Running
After=graphical.target
[Service]
Type=simple
User=pi
ExecStart=/usr/bin/python /home/pi/pi-project/pi-main.py
Restart=on-abort
[Install]
WantedBy=graphical.target
【问题讨论】:
-
您尚未设置起始目录。默认起始目录位于根目录 ("/"),这就是您所看到的。您可以在 systemd 文件中使用
WorkingDirectory来设置所需的起始目录。 -
另外,
'pythontut.db'是相对路径名。操作系统将自动添加当前工作目录。所以,你的 CWDos.path.join并没有真正做任何事情。它可以被认为是防御性编程,以防其他模块不明智地更改 CWD,但这是其他人代码中的错误。
标签: python sqlite systemd os.path