【发布时间】:2020-05-22 14:54:16
【问题描述】:
我有一个 Python 脚本,我想在启动时运行并在 Mac 上持续运行。我相信脚本正在执行,但它不会继续运行。
该设置是一个加载了 launchctl 的 plist 脚本,用于在启动时启动 Python 脚本 - 该脚本应始终保持运行。
(始终运行的)Python 脚本使用“调度”模块,该模块应在特定时间执行一个函数。
只要计算机处于开启状态,如何使此脚本运行?我可以看到它在某处运行吗?
具体来说:如果我只在终端中手动运行 Python 脚本,它会连续运行,并使用 schedule 模块在指定时间执行该函数。
如果我在启动时加载了 plist 脚本,那么 Python 脚本不会在指定时间执行该函数尽管如此,如果我将 Python 脚本更改为 ONE TIME 执行该函数,那么 plist 脚本将在启动时执行它。
[在下面的所有代码中,将“/path/to”更改为您的路径,以及您的 Mac 的用户名等(如果复制)。]
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 脚本应在下午 1:00 将照片发布到 Facebook 页面。 (对于我的问题,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 的情况下每天在同一时间触发脚本?
【问题讨论】:
标签: python scheduled-tasks schedule