首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用sudo运行脚本或使用crontab调度脚本会导致错误?

问为什么使用sudo运行脚本或使用crontab调度脚本会导致错误?
EN

Stack Overflow用户
提问于 2019-08-13 14:46:26
回答 1查看 293关注 0票数 0

我用python编写了一个简单的脚本来改变桌面的墙纸。当在终端中以./script.py的形式执行时,它可以工作,因为它有一个用于python3的shebang。但是,如果我尝试以sudo ./script.py运行该脚本,或者尝试使用cron调度该脚本,则该脚本不起作用。我是一个linux和python的新手,我读过一些东西,我认为它与PATH或env有关,但我不确定。

以下是更改我在raspberry pi上的墙纸的python脚本:

代码语言:javascript
复制
#!/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行:

代码语言:javascript
复制
*/1 * * * * env DISPLAY=:0 /usr/bin/python3 woll.py

当脚本作为sudo运行或每分钟被cron调用时,它会在终端中给出一个奇怪的错误:

代码语言:javascript
复制
** Message: 08:41:35.152: x-terminal-emulator has very limited support, consider choose another terminal

可能是什么问题?是不是程序"pcmanfm“( raspberry pi的默认文件/窗口管理器)的路径在运行sudo/cron时找不到?cron是否以sudo身份运行?我尝试通过告诉相同的终端返回“terminal”来调试它,它返回了pi,这应该可以很好地工作,因为我可以通过一个普通的终端以我的普通用户帐户"pi“来执行脚本,而不是以root用户的身份,并且脚本可以工作。Much I am

EN

回答 1

Stack Overflow用户

发布于 2019-08-13 15:34:24

所以现在我的背景改变的方式是: crontab -->执行具有特殊命令的bash脚本,请参见:

Pcmanfm set wallpaper fails on Raspbian stretch in cron

--> bash脚本执行python脚本--> python脚本使用更改后台命令打开终端。

感谢大家的帮助!在此过程中,我学到了一点linux和python,谁知道自动更换墙纸会如此困难。我花了两天时间,但是感觉真棒,准备好,伊隆,我来了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57472457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档