我有一个Python程序“ Alfred.py”,我希望它可以通过在终端中单击图标或键入“ Alfred”来运行。它被连接到数据库文件,并在需要时提取Excel文件。当我尝试通过单击运行它时,这是我得到的:

mcaay:~ mcaay$ /Users/mcaay/Documents/Moje\ Dokumenty/MANTA/Alfred/Alfred.desktop ; exit;
/Users/mcaay/Documents/Moje Dokumenty/MANTA/Alfred/Alfred.desktop: line 1: [Desktop: command not found
Traceback (most recent call last):
  File "/Users/mcaay/Documents/Moje Dokumenty/MANTA/Alfred/Alfred.py", line 59, in <module>
    AND Usterka IS NOT NULL;""")
sqlite3.OperationalError: no such table: repairs
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]


这行:

sqlite3.OperationalError: no such table: repairs


表示Alfred.py未找到.db文件,而是创建了该文件,但该文件为空,因此没有名为“ repairs”的表。该.db文件与Alfred.py位于同一目录中。

到目前为止,我所做的是:


添加“#!/ usr / bin / env python3”作为Alfred.py的第一行
在终端中键入“ chmod + x / Users / mcaay / Documents / Moje \ Dokumenty / MANTA / Alfred / Alfred.py”以使其可执行
在我的.bash_profile中添加了“ export PATH = $ PATH:/ Users / mcaay / Documents / Moje \ Dokumenty / MANTA / Alfred /”,以使Alfred.py可从终端中的任何位置访问
为可点击图标创建了Alfred.desktop文件:


[Desktop Entry]
Name=Alfred
Exec=python3 /Users/mcaay/Documents/Moje\ Dokumenty/MANTA/Alfred/Alfred.py
Terminal=true
Type=Application



通过在终端中键入“ chmod + x / Users / mcaay / Documents / Moje \ Dokumenty / MANTA / Alfred / Alfred.desktop”,使Alfred.desktop可执行


当我输入终端“ Alfred.py”时,我得到:

mcaay:~ mcaay$ Alfred.py
Traceback (most recent call last):
  File "/Users/mcaay/Documents/Moje Dokumenty/MANTA/Alfred/Alfred.py", line 59, in <module>
    AND Usterka IS NOT NULL;""")
sqlite3.OperationalError: no such table: repairs


因此,与单击“ Alfred.desktop”相同。
如果仅输入“ Alfred”,则会得到:

mcaay:~ mcaay$ Alfred
-bash: Alfred: command not found


我只想输入“ Alfred”即可,并且希望它正确查看数据库和其他文件,或者如果单击该图标也可以正常工作,那也是可以接受的。我的Googe-Fu在这里失败了我。做什么?

附言我注意到在我的主目录(“ / Users / mcaay”)中创建了一个数据库文件,好像Alfred.py是从原始目标位置拉到某个临时目标并在那里执行的(其他文件没有被拉出,因此程序崩溃了)。

最佳答案

当您告诉SQLite在哪里找到数据库时,您使用的是相对路径,但是该相对路径是相对于当前工作目录的。您需要在脚本中更改目录或为SQLite提供数据库的完整路径。无论哪种方式,这都需要逻辑来查找脚本的位置,或者您可以将数据库放置在另一个众所周知的路径(例如,~/.config/alfred)中。就个人而言,我更喜欢始终构建完整路径,并尽可能避免使用相对路径(和更改目录)选项,但是脚本路径的chdir也应相对安全,并且此时可能需要较少的更改。

07-24 09:47