2013-05-15 104 views
1

這裏是我的腳本(randombg.py):Python腳本在crontab中不能正常工作

#!/usr/bin/env python 
# -*- coding: utf8 -*- 

import random 
import subprocess 
import os 


BACKGROUND = '/home/david/wallpaper/dell2312' 
IGNORE_FILES = ['/home/david/wallpaper/dell2312/.directory'] 


def enumerate(): 
    global BACKGROUND 
    file_collections = [] 
    for root, dirs, files in os.walk(BACKGROUND): 
     for file in files: 
      file_collections.append(os.path.join(root, file)) 
    return file_collections 


def randombg(): 
    select_files = list(set(enumerate())-set(IGNORE_FILES)) 
    subprocess.call(['feh', '--bg-scale', random.choice(select_files)]) 


def main(): 
    while 1: 
     randombg() 


if __name__ == '__main__': 
    main() 

我已經運行chmod a+x randombg.py並將其與python randombg.py工作。讓我們假設它的路徑是/path/to/randombg.py.此外,運行/path/to/randombg.py工作。

然而,當我加入它下面的crontab:

1 * * * * /path/to/randombg.py 

01 * * * * python /path/to/randombg.py 

01 * * * * /usr/bin/python /path/to/randombg.py 

都失敗了。

我想不通。誰能解釋一下?

PS:ArchLinux的


的介紹:

當我運行ps aux|grep python,我找不到randombg.py,而有時會出現。從crontab中重定向標準錯誤


Addtional日誌:

import: unable to open X server `' @ error/import.c/ImportImageCommand/361. 
import: unable to open X server `' @ error/import.c/ImportImageCommand/361. 
import: unable to open X server `' @ error/import.c/ImportImageCommand/361. 
/home/david/dotfiles/randombg.py: line 9: BACKGROUND: command not found 
/home/david/dotfiles/randombg.py: line 10: IGNORE_FILES: command not found 
/home/david/dotfiles/randombg.py: line 13: syntax error near unexpected token `(' 
/home/david/dotfiles/randombg.py: line 13: ` def enumerate():' 
+0

你的'while'循環將永遠運行 – Blender

+0

對不起,我忘了刪除它。 – holys

+0

你能將錯誤重定向到一個文件嗎? – Blender

回答

0

試圖改變自己的subprocess.call

subprocess.call("export DISPLAY=:0; feh --bg-scale " + random.choice(select_files), shell=True) 

這應該導出DISPLAY變量,腳本從運行crontab用不上默認爲環境變量。

+0

非常感謝 – holys