Python脚本根据一天中的时间更改墙纸

2024-04-24 06:24:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我用xfce运行linuxmint13。使用this thread中的脚本,我可以使用以下格式运行cronjob:

PATH=/usr/bin/python/:/usr/bin/python3/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# The Wallpaper Changer
0 * * * * /home/tessitura/8BitDay/set.py

。。。但是我遇到了一些脚本本身的问题。同样,只更改目录名,会出现以下错误:

^{pr2}$

我试着对代码稍作调整,结果有点管用;墙纸改变了,但是现在.png最终会被删除,导致cronjob运行时出现空白图像。我现在的情况是:

#!/usr/bin/python3    

# Finds the current hour
import datetime
time = int(str(datetime.datetime.now().time()).split(":")[0])    

# Needed for renaming files
import os    

# List of all files in the folder
files = ['05-Evening.png', 'set.py', '07-Night.png', '01-Morning.png', '03-Afternoon.png', '06-Late-Evening.png', '08-Late-Night.png', '04-Late-Afternoon.png', '02-Late-Morning.png', 'now.png']   

# Finds which wallpaper is currently set
directory = "/home/tessitura/8BitDay/"
for filename in os.listdir(directory):
    files.remove(files[files.index(filename)])
    current = ''.join(filename)    

# Puts back the current wallpaper
path = os.path.join(directory, 'now.png')
os.rename(path, current)    

# Gets out the new wallpaper based on time
if 0 <= time <= 3:
    os.rename('08-Late-Night.png', 'now.png')
elif 4 <= time <= 5:
    os.rename('01-Morning.png', 'now.png')
elif 6 <= time <= 10:
    os.rename('02-Late-Morning.png', 'now.png')
elif 11 <= time <= 14:
    os.rename('03-Afternoon.png', 'now.png')
elif 15 <= time <= 16:
    os.rename('04-Late-Afternoon.png', 'now.png')
elif 17 <= time <= 18:
    os.rename('06-Late-Evening.png', 'now.png')
elif 19 <= time <= 23:
    os.rename('07-Night.png', 'now.png')    

# Refreshes the desktop
os.system("xfdesktop --reload")

更新:Blckknght的解决方案修复了脚本。Mint 13的一切都很好,但是我已经升级到Mint 17.1,我又遇到了问题。这个脚本独立运行很好,但这一次,问题出在crontab上。运行每小时的cronjob会导致以下结果:

Failed to parse arguments: Cannot open display: 

我把这个工作改成了这个。。。在

PATH=/usr/bin/python/:/usr/bin/python3/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
@hourly DISPLAY=:0.0 /home/tessitura/8BitDay/set.py > /home/tessitura/set.log 2>&1

这给了我一个错误:

Failed to connect to session manager: Failed to connect to the session manager: SESSION_MANAGER environment variable not defined

** (xfdesktop:9739): WARNING **: xfdesktop: already running, quitting.

Tags: theto脚本bintimepngosusr
1条回答
网友
1楼 · 发布于 2024-04-24 06:24:25

您当前的代码比实际需要的更复杂,因为您正在重命名文件,因此需要将当前的now.png文件重命名回其原始名称。在

将与时间相适应的文件复制到新的名称,覆盖该位置的现有文件(如果存在的话)会简单得多。因为您是复制而不是重命名,所以您永远不需要反转过程。在

以下是使用shutil.copy完成此操作的代码版本:

import datetime
import os
import shutil

time = datetime.datetime.now().hour  # no need for string parsing to get the hour

# Gets out the new wallpaper based on time
if 0 <= time <= 3:
    shutil.copy('08-Late-Night.png', 'now.png')
elif 4 <= time <= 5:
    shutil.copy('01-Morning.png', 'now.png')
elif 6 <= time <= 10:
    shutil.copy('02-Late-Morning.png', 'now.png')
elif 11 <= time <= 14:
    shutil.copy('03-Afternoon.png', 'now.png')
elif 15 <= time <= 16:
    shutil.copy('04-Late-Afternoon.png', 'now.png')
elif 17 <= time <= 18:
    shutil.copy('06-Late-Evening.png', 'now.png')
elif 19 <= time <= 23:
    shutil.copy('07-Night.png', 'now.png')    

# Refreshes the desktop
os.system("xfdesktop  reload")

相关问题 更多 >