在OSX上后台运行Python
有没有办法让我的Python脚本(有一个无休止的while循环)在OSX的后台运行?此外,出于同样的目的,有没有办法在USB驱动器上“自动运行”python脚本?只需在后台使用shell以通常的方式运行python脚本:在OSX上后台运行Python,python,macos,daemon,Python,Macos,Daemon,有没有办法让我的Python脚本(有一个无休止的while循环)在OSX的后台运行?此外,出于同样的目的,有没有办法在USB驱动器上“自动运行”python脚本?只需在后台使用shell以通常的方式运行python脚本: python myscript.py & 至于自动运行问题,如果这是MacOSX默认做的事情,这将是一个巨大的安全漏洞,所以,不,当然不是。但是,您可以很容易地编写一个脚本来实现这样的目的:定期查找插入的USB驱动器,并在其插入时执行一些操作(甚至从thumb驱动器运
python myscript.py &
至于自动运行问题,如果这是MacOSX默认做的事情,这将是一个巨大的安全漏洞,所以,不,当然不是。但是,您可以很容易地编写一个脚本来实现这样的目的:定期查找插入的USB驱动器,并在其插入时执行一些操作(甚至从thumb驱动器运行第二个脚本)。有关在类Unix系统上对python脚本进行后台监控的方法,请参见此问题:
当然,如果您只需要kindall提到的脚本,您可以随时在后台运行该脚本。如果您想让脚本作为自动启动的守护进程运行,可以使用和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.bobb.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
的unload命令:
launchctl unload ~/Library/LaunchAgents/com.bobbob.osx.test.plist
脚本中使用的标签可以是任何东西,但在您的系统中应该是唯一的,因此苹果通常使用反向域名
至于自动运行脚本,我认为没有任何方法可以做到这一点。我尝试了
启动ctl
,但无法在El Capitan中运行,于是四处搜索并找到了这个
TL;DR
使用shebang行#/usr/bin/env python
或#/脚本上的path/to/python
chmod +x test.py
nohup /path/to/test.py &
ps ax | grep test.py
你可以使用nohup
$nohup python&
这将运行您的进程并将输出附加到同一目录中的文件nohup.out中。
&将在后台运行脚本,如其他答案所述。我认为
屏幕
应该与问题的第一部分一样好,但当外壳关闭时,脚本不会继续运行,是吗?是的,你是对的。我从来没有关闭我的壳,所以我没有考虑。更好的选择可能是启动脚本的AppleScript小程序。
chmod +x test.py
nohup /path/to/test.py &
ps ax | grep test.py
$ nohup python <your_script.py> &