python - 在 OS X 后台运行 Python

标签 python macos daemon

有什么方法可以让我的 Python 脚本(带有无限的“while”循环)在 OS X 的后台运行?此外,出于同样的目的,有没有办法在 USB 驱动器上安装“自动运行”python 脚本?

最佳答案

如果你想让脚本作为自动启动的守护进程运行,你可以使用launchctl和一个 plist 文件。

例如,Bob 有一个简单的 python 脚本,它每秒将单词“foo”写入他的主目录中的一个文件:

#!/usr/bin/env python
import os
import time

while True:
  os.system('echo " foo" >> /Users/bob/foostore.txt')
  time.sleep(1)

要让它作为守护进程运行,请创建一个 plist 文件,~/Library/LaunchAgents/com.bobbob.osx.test.plist ,内容为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.bobbob.osx.test</string>
    <key>Program</key>
    <string>/Users/bob/pyfoo.py</string>
    <key>KeepAlive</key>
    <true/>
  </dict>
</plist>

然后使用launchctl从终端加载 plist:

launchctl load ~/Library/LaunchAgents/com.bobbob.osx.test.plist

这将加载该脚本并立即运行 <string> 中的程序<key>Program</key> 下面的元素.您还可以使用 <ProgramArguments> 为程序指定参数具有 <string> 数组的节点元素。有关详细信息,请参阅 launchd.plist man page

如果要删除脚本,可以使用launchctl的unload命令:

launchctl unload ~/Library/LaunchAgents/com.bobbob.osx.test.plist

脚本中使用的Label可以是任意的,但是在你的系统上应该是唯一的,所以Apple一般使用倒序的域名。

至于自动运行脚本,我认为没有任何办法。

关于python - 在 OS X 后台运行 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522324/

相关文章:

python - 在Python中查找偶数斐波那契数之和的代码的内存错误

python - Plotly:如何使用 plotly express 在辅助 y 轴上绘图

c++ - pplx::守护进程未执行的任务

c - 通过在另一个控制台中再次执行后台进程来结束它,如何完成?

python - 有效地生成大量有偏差的抛硬币

python - 在 __iter__() 中使用 yield 有什么好处?

macos - 预加载字体菜单

macos - sudo nginx -t 密码问题

macos - 告诉 macOS 不带 .png 扩展名的自定义文件格式是有效的 png

bash - Linux守护程序正在等待套接字连接