0

背景

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

问题

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

1 回答 1

6

问题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)

你没有。不是来自脚本内部。您使用某种安装程序(或包 postflight 脚本,或其他)。

添加在启动时运行的东西需要 root/admin 权限。您的脚本(希望)没有以此类权限运行。因此,它做不到。是的,可以通过各种方式提升权限,但这几乎肯定不是您想要在最终在启动时运行的脚本中执行的操作。

那么,您的安装程序是如何做到的呢?

OS X:您需要创建一个 Launch Daemon,并附带一个 launchd plist。这在创建启动守护程序和代理中进行了描述。如果你没有读过那篇文章,你不应该尝试这样做,如果你读过那篇文章,你就会知道如何做,所以没有什么可说的了。

Windows:执行此操作的官方方法在Run 和 RunOnce Registry Keys中进行了说明。再说一遍,不读这篇文章你就不应该这样做,读完这篇文章后很明显,除了两件事:首先,在四个键中,它是 HKLM Run 键。其次,在现代 Windows 中,这实际上并不是在启动时运行,而是在启动后的第一次登录时运行;如果这不可接受,请RunServices改为调查。

Linux:什么是安装程序?您是否期望为每个发行版家庭提供一种方法?除了确切地知道您想在每个发行版上做什么之外,本入门书为您提供了您需要的大部分信息。一般来说,如果你只想让你的脚本运行一次并退出,并且有一个rc.local.d, 你只需要在其中放置一个链接。否则,您要么需要创建一个rc.d脚本,将其安装到正确的位置,然后运行正确的chkconfig命令,要么您需要编辑rc.local运行你的脚本。但最简单的事情是:只需将英文文本放入 INSTALL 文件中,告诉人们这样做。最终,当有人决定为 Ubuntu 制作 DEB 或为 Redhat 制作 RPM 或其他任何东西时,他们会为他们的发行版做正确的事情,或者向您提交补丁或单独维护它。

于 2013-02-22T01:02:27.373 回答