背景
我需要创建一个在启动时运行的python脚本。问题是该脚本必须是独立于平台的,因为它将在不同的操作系统上使用。它需要是一个自动设置,因为它将由用户运行,因此我将无法在每台机器上设置任务调度程序。
问题
答案 0 :(得分:4)
问题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)
你没有。不是来自脚本内部。您使用某种安装程序(或包邮后脚本等)。
添加在启动时运行的内容需要root / admin权限。你的脚本(希望)没有运行这样的权利。因此,它无法做到。是的,可以通过各种方式提升权限,但这几乎肯定不是你想要在启动时最终运行的脚本中做的事情。
那么,您的安装人员如何做到呢?
OS X:您需要创建一个Launch Daemon,并附带一个launchd plist。这在Creating Launch Daemons and Agents中有所描述。如果你没有阅读那篇文章,你不应该试图这样做,而且你已经知道如果你读过那篇文章了,所以没有什么可说的了。
Windows:Run and RunOnce Registry Keys中解释了执行此操作的官方方式。再说一遍,你不应该在没有阅读这篇文章的情况下这样做,在阅读完文章之后,这是非常明显的,除了两件事:首先,在四个键中,它是HKLM Run键。其次,在现代Windows中,这实际上并不是在启动时运行,而是在启动后的第一次登录时运行;如果这是不可接受的,请转而使用RunServices
。
Linux:什么是安装程序?你是否期望为每个发行家庭提供一种方法? This primer为您提供了所需的大部分信息,除了知道您想要在每个发行版上做什么。一般来说,如果你只想让你的脚本运行一次并退出,并且有一个rc.local.d
,你只需要在那里删除一个链接。否则,您需要创建rc.d
脚本,将其安装到正确的位置,然后运行正确的chkconfig
命令,或者需要编辑rc.local
来运行脚本。但最简单的事情是:只需将英文文本放入INSTALL文件中,告诉人们这样做。最终,当有人决定为Ubuntu或者Redhat或者其他任何东西制作DEB时,他们会为他们的发行版做正确的事情,并向你提交补丁或者单独维护它。