【发布时间】:2019-12-19 16:45:39
【问题描述】:
我在 python 中有一个简单的脚本来更改桌面墙纸。 它在终端中执行时工作为: ./script.py 因为它有一个适用于 python3 的 shebang。但是,如果我尝试将其作为 sudo ./script.py 运行或尝试使用 cron 安排脚本,则该脚本不起作用。 我是 linux 和 python 的新手,我做了一些阅读,并认为它与 PATH 或 env 有关,但我不确定。
这是在树莓派上更改我的壁纸的 python 脚本:
#!/usr/bin/env python3
import os,random
import subprocess as sub
random_pic = random.choice(os.listdir('/usr/share/rpd-wallpaper/'))
print(random_pic)
shell_command = ("pcmanfm --set-wallpaper /usr/share/rpd-wallpaper/" + str(random_pic))
# open a terminal and changes wallpaper with path of picture above
sub.call('lxterminal -e bash -c "{0}; sleep 5; echo background changed...; pwd; whoami; sleep 1; exec bash"'.format(shell_command), shell=True)
这是我添加的 crontab 行:
*/1 * * * * env DISPLAY=:0 /usr/bin/python3 woll.py
当脚本以 sudo 运行或每分钟被 cron 调用时,它会在终端中给我一个奇怪的错误:
** Message: 08:41:35.152: x-terminal-emulator has very limited support, consider choose another terminal
可能是什么问题,当以 sudo/cron 运行时,找不到程序“pcmanfm”(树莓派的默认文件/窗口管理器)的 PATH? cron 是否作为 sudo 运行?我尝试通过告诉同一个终端返回“whoami”并返回 pi 来调试它,这应该可以正常工作,因为我可以通过普通终端作为我的普通用户帐户“pi”执行脚本,而不是作为 root 并且脚本可以工作.我很困惑。
【问题讨论】:
-
你能测试
which pcmanfm和sudo which pcmanfm吗? -
两者都返回:/usr/bin/pcmanfm
-
建议重复的解决方案是添加
DISPLAY,但这里的 OP 已经在这样做了。这可能是其他问题的重复,并且可能正确的答案是“看在上帝的份上,不要从cron运行 终端 来更改您的墙纸”。 -
谢谢 alfasin,那个链接帮助了我!
-
终端带来什么可能的好处?只需直接从 Python 脚本运行命令即可。
标签: python linux bash cron raspberry-pi