2015-01-06 2 views
2

Я запускаю Linux Mint 13 с xfce. Использование сценария в this thread, я был в состоянии получить cronjob работает с этим форматом:Python скрипт для изменения обоев в зависимости от времени суток

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 

... но я бег в некоторых проблемы с самим сценарием. Как есть, меняется только имя каталога, он дает мне следующую ошибку:

Traceback (most recent call last): 
    File "./set.py", line 19, in <module> 
    os.rename('now.png', current)  
OSError: [Errno 2] No such file or directory 

Я попытался настройки кода немного, и это своего рода работ; обои меняют, но now.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") 

UPDATE: решение Blckknght в фиксирует сценарий. Все отлично в Mint 13, но с тех пор я обновился до Mint 17.1, и у меня снова возникают проблемы. Скрипт работает просто отлично, но на этот раз проблема связана с crontab. Запуск почасовые результаты cronjob в этом:

Failed to parse arguments: Cannot open display: 

Я изменил cronjob на это ...

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. 
+0

'datetime.datetime.now() время() hour' будет на самом деле получить час –

+0

' os.listdir (путь) 'будет перечислять файлы в' path'. Это только в том случае, если вы хотите перечислить все файлы, поэтому вам не нужно жестко указывать имена – Paco

+0

. Было бы гораздо проще использовать pickle или json в используемом файле и просто проверять, что каждый раз –

ответ

2

Ваш текущий код является более сложным, чем это должно быть, потому что вы переименовываете файлы и, следовательно, необходимо переименовать текущий файл 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") 
+0

Это работает отлично! Спасибо! – Gizmaton

Смежные вопросы