У меня есть сценарий Python, который я хочу запустить при запуске и продолжаю работать непрерывно на Ma c. Я полагаю, что скрипт выполняется, но он не продолжает работать.
Установка представляет собой plist-скрипт, загруженный с launchctl для запуска Python скрипта при загрузке, который должен всегда работать.
(всегда работает) * Сценарий 1025 * использует модуль «расписание», который должен выполнять функцию в определенное время c.
Как я могу запустить этот сценарий, пока компьютер включен? Могу ли я увидеть, что он где-то работает?
В частности: если я вручную запускаю только скрипт Python в терминале, он работает непрерывно и выполняет функцию в указанное время с модулем расписания.
Если у меня есть при загрузке сценария plist при запуске сценарий Python НЕ выполняет функцию в указанное время, хотя, если я изменю сценарий Python на выполнение функции ОДИН РАЗ, сценарий plist выполнит его при запуске.
[In весь приведенный ниже код заменит '/ path / на' на ваши пути и на ваше имя пользователя Ma c, et c. при репликации.]
Сценарий plist ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
<key>Label</key>
<string>Run.The.FB.photoblast</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/python</string>
<string>/path/to/python/script.py</string>
</array>
<key>StandardErrorPath</key>
<string>/var/log/python_script.error</string>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Я сохраняю этот файл в
/Users/<user_name>/Library/LaunchAgents/FB_Photo_script_launcher.plist
и запускаю ...
sudo launchctl load -w /Users/<user_name>/Library/LaunchAgents/FB_Photo_script_launcher.plist
Сценарий Python, приведенный ниже, должен опубликовать фотографию на странице Facebook в 13:00. (На мой вопрос скрипт Python может сделать что-нибудь измеримое). Из-за 'while True' внизу, этот скрипт должен всегда запускаться и ожидать запуска schedule.run_pending ().
import os
import time
import glob
import random
import facebook
import schedule
#wait 13 seconds to give the computer time to wake up
time.sleep(13)
def job():
allphotofiles = glob.glob('/users/<user_name>/documents/fbcal/photos/*.jpg')
one_photo = allphotofiles[random.randint(0, len(allphotofiles)-1)]
#one_photo = glob.glob(one_random + '/*.jpg')[0]
d = {
'Calg Big': 'FACEBOOK_PAGE_TOKEN'}
for i in d:
graph = facebook.GraphAPI(access_token=d[i], version='3.1')
graph.put_photo(image=open(one_photo, "rb"))
print(i)
os.rename(one_photo, '/users/<user_name>/documents/fbcal/used/'+one_photo[43:])
# job()
schedule.every().day.at("13:00").do(job())
while True:
schedule.run_pending()
time.sleep(1)
Спасибо, что прочитали этот вопрос. Моя ситуация очень запутанная. Может быть, мне нужен совершенно другой подход. Я пытался создать «приложение» с помощью Automator, но у него было несколько проблем. Версия Automator Python не могла импортировать Facebook SDK, вентиляторы моих компьютеров работали на полной скорости, когда я запускал приложение вручную или при запуске. Я не мог понять, как запланировать это, и у меня уже есть часть планирования, о которой позаботились в сценарии Python. Мне просто нужен скрипт Python для запуска при загрузке и никогда не прекращать работу. Есть ли другой таймер, который я могу использовать для запуска сценария в одно и то же время каждый день без использования Automator?