创建在启动时运行的python脚本

时间:2013-02-22 00:48:33

标签: python cross-platform startupscript

背景

我需要创建一个在启动时运行的python脚本。问题是该脚本必须是独立于平台的,因为它将在不同的操作系统上使用。它需要是一个自动设置,因为它将由用户运行,因此我将无法在每台机器上设置任务调度程序。

问题

  1. 如何在Python中找出计算机运行的操作系统?
  2. 如何在启动时运行脚本(Linux,Mac OSX,Windows)

1 个答案:

答案 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时,他们会为他们的发行版做正确的事情,并向你提交补丁或者单独维护它。