有什么方法可以让我的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其内容为:
~/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
launchctl load ~/Library/LaunchAgents/com.bobbob.osx.test.plist
这将加载该脚本并立即在<string>下面的元素中运行程序<key>Program</key>。您也可以使用<ProgramArguments>带有<string>元素数组的节点为程序指定参数。有关更多信息,请参见launchd.plist手册页。
<string>
<key>Program</key>
<ProgramArguments>
如果要删除脚本,可以使用以下命令的卸载命令launchctl:
launchctl unload ~/Library/LaunchAgents/com.bobbob.osx.test.plist
脚本中使用的标签可以是任何东西,但在您的系统上应该是唯一的,因此Apple通常使用反向域名。
至于执行脚本的老师,我认为没有任何办法可以做到这一点。