tkb*_*kbx 12 python macos daemon
有什么方法可以保持我的Python脚本(带有无限的'while'循环)在OS X的后台运行?另外,出于同样的目的,有没有办法在USB驱动器上安装"自动运行"python脚本?
mne*_*nem 35
如果要将脚本作为自动启动的守护进程运行,可以使用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)
Run Code Online (Sandbox Code Playgroud)
要让它作为守护进程运行,请创建一个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>
Run Code Online (Sandbox Code Playgroud)
然后用来launchctl从终端加载plist:
launchctl load ~/Library/LaunchAgents/com.bobbob.osx.test.plist
Run Code Online (Sandbox Code Playgroud)
这将加载该脚本并立即在<string>下面的元素中运行该程序<key>Program</key>.您还可以使用具有元素<ProgramArguments>数组的节点为程序指定参数<string>.有关更多信息,请参见launchd.plist手册页
如果要删除脚本,可以使用以下命令的卸载命令launchctl:
launchctl unload ~/Library/LaunchAgents/com.bobbob.osx.test.plist
Run Code Online (Sandbox Code Playgroud)
脚本中使用的标签可以是任何内容,但它在您的系统上应该是唯一的,因此Apple通常使用反向域名.
至于自动运行脚本,我认为没有办法做到这一点.
我尝试过launchctl,但无法使其在 El Capitan 中工作,并进行了更多搜索,发现了这篇文章
长话短说
使用 shebang 行#!/usr/bin/env python或#!/path/to/python在您的脚本上
chmod +x test.py
nohup /path/to/test.py &
ps ax | grep test.py
Run Code Online (Sandbox Code Playgroud)