创建开机启动的Python脚本
背景
我需要创建一个在启动时运行的Python脚本。问题是,这个脚本必须能够在不同的操作系统上使用,因为它会在不同的电脑上运行。它需要自动设置,因为是用户自己运行,所以我不能在每台机器上单独设置任务调度器。
问题
- 如何在Python中判断一台电脑运行的是哪个操作系统?
- 如何让一个脚本在启动时自动运行(Linux、Mac OSX、Windows)
1 个回答
问题1很简单:
如何在Python中找出计算机运行的操作系统是什么?
可以用 sys.platform
来查看:
if sys.platform.startswith('win') or sys.platform.startswith('cygwin'):
do_windows_stuff()
elif sys.platform.startswith('darwin'):
do_osx_stuff()
elif sys.platform.startswith('linux'):
do_linux_stuff()
else:
raise Exception("Nobody's written the stuff for {}, sorry".format(sys.platform))
第二部分也不难,但可能不是你想听的方式:
如何让脚本在启动时运行(Linux、Mac OSX、Windows)
你不能这样做。不能从脚本内部去实现。你需要使用某种安装程序(或者包的后续脚本,等等)。
要添加在启动时运行的程序需要管理员权限。你的脚本(希望是这样)并没有这样的权限。因此,它无法做到。是的,有很多方法可以提升权限,但这几乎肯定不是你想在一个会在启动时运行的脚本中做的事情。
那么,你的安装程序是怎么做到的呢?
OS X:你需要创建一个启动守护进程,并配上一个launchd的plist文件。这在 创建启动守护进程和代理 中有详细说明。如果你没有读过那篇文章,就不应该尝试这样做;如果你读过了,你就会知道怎么做,所以没什么好说的。
Windows:官方的做法在 运行和RunOnce注册表键 中有解释。同样的,你不应该在没有阅读这篇文章的情况下去做,读完后就会很明显,除了两点:首先,在四个键中,是HKLM的Run键。其次,在现代Windows中,这实际上是在启动后的第一次登录时运行,而不是在启动时运行;如果这不合适,可以看看 RunServices
。
Linux:什么是安装程序?你是期待每个发行版都有一种方法吗? 这篇入门文章提供了大部分你需要的信息,除了你需要知道每个发行版具体要做什么。一般来说,如果你只是想让脚本运行一次然后退出,而有一个 rc.local.d
,你只需要在里面放一个链接。否则,你要么需要创建一个 rc.d
脚本,安装到正确的位置,并运行正确的 chkconfig
命令,要么需要编辑 rc.local
来运行你的脚本。但最简单的做法是:在INSTALL文件中写上英文说明,告诉大家怎么做。最终,当有人决定为Ubuntu制作一个DEB包或为Redhat制作一个RPM包时,他们会为自己的发行版做正确的事情,或者向你提交补丁,或者单独维护。