2016-02-08 2 views
0

У меня очень простой тестовый скрипт, который я хочу, чтобы мой компьютер запускался каждые 60 секунд - time_test_script.py. Сценарий просто сохраняет файл .txt с текущим временем как имя и записывает текст в файл. Файл находится в директории /Users/me/Documents/Python.Запуск сценариев Python с помощью launchctl (OSX)

import datetime 
import os.path 
path = '/Users/me/Desktop/test_dir' 
name_of_file = '%s' %datetime.datetime.now() 
completeName = os.path.join(path, name_of_file+".txt") 
file1 = open(completeName, "w") 
toFile = 'test' 
file1.write(toFile) 
file1.close() 
print datetime.datetime.now() 

У меня также есть .plist файла - test.plist, который находится в /Library/LaunchAgents реже.

test.plist

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.test</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Users/me/Documents/Python/time_test_script.py</string> 
    </array> 
    <key>StartInterval</key> 
    <integer>60</integer> 
</dict> 
</plist> 

Если я запускаю сценарий вручную он работает нормально, то есть создает .txt файл в указанном каталоге. Однако, когда я пытаюсь инициировать launchctl с Терминала, ничего не происходит.

$ launchctl load /Library/LaunchAgents/test.plist 
$ launchctl start com.test 

Что я делаю неправильно?

ответ

-1

Если вы запускаете скрипт без использования python scriptname.py, то скрипт должен быть помечен исполняемыми (chmod a+x scriptname.py из командной строки) и первая строка должна сообщить системе, какой переводчик использовать, который в этом случае будет #!/usr/bin/python.

Например:

Sapphist:~ zoe$ cat >test.py 
print "Hello World" 
Sapphist:~ zoe$ ./test.py 
-bash: ./test.py: Permission denied 

С просто выполнить набора бит:

Sapphist:~ zoe$ cat >test.py 
print "Hello World" 

Sapphist:~ zoe$ chmod a+x test.py 
Sapphist:~ zoe$ ./test.py 
./test.py: line 1: print: command not found 

С как переводчика и выполнить бит:

Sapphist:~ zoe$ cat >test.py 
#!/usr/bin/python 
print "Hello World!" 

Sapphist:~ zoe$ chmod a+x test.py 
Sapphist:~ zoe$ ./test.py 
Hello World! 
Sapphist:~ zoe$