Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OSX上后台运行Python_Python_Macos_Daemon - Fatal编程技术网

在OSX上后台运行Python

在OSX上后台运行Python,python,macos,daemon,Python,Macos,Daemon,有没有办法让我的Python脚本(有一个无休止的while循环)在OSX的后台运行?此外,出于同样的目的,有没有办法在USB驱动器上“自动运行”python脚本?只需在后台使用shell以通常的方式运行python脚本: python myscript.py & 至于自动运行问题,如果这是MacOSX默认做的事情,这将是一个巨大的安全漏洞,所以,不,当然不是。但是,您可以很容易地编写一个脚本来实现这样的目的:定期查找插入的USB驱动器,并在其插入时执行一些操作(甚至从thumb驱动器运

有没有办法让我的Python脚本(有一个无休止的while循环)在OSX的后台运行?此外,出于同样的目的,有没有办法在USB驱动器上“自动运行”python脚本?

只需在后台使用shell以通常的方式运行python脚本:

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> &