Создайте скрипт python, который запускается при запуске

Задний план

Мне нужно создать скрипт python, который запускается при запуске. Проблема в том, что этот скрипт должен быть независимым от платформы, потому что он будет использоваться в разных операционных системах. Он должен быть автоматическим, потому что он будет запускаться пользователем, и поэтому я не буду устанавливать планировщики задач на каждой отдельной машине.

Вопросов

  1. Как узнать, какая ОС на компьютере работает в Python?
  2. Как запустить скрипт при запуске (Linux, Mac OSX, Windows)

    Вопрос 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: вам нужно создать Daunch Daemon с сопроводительным плагином запуска. Это описано в разделе «Создание демонов запуска и агентов» . Вы не должны пытаться это сделать, если вы не читали эту статью, и вы уже знаете, как читать эту статью, так что еще нечего сказать.

    Windows: официальный способ сделать это объясняется в Run и RunOnce Registry Keys . Опять же, вы не должны делать этого, не читая эту статью, и после прочтения статьи это довольно очевидно, за исключением двух вещей: во-первых, из четырех ключей это ключ запуска HKLM. Во-вторых, в современных Windows это фактически не запускается при запуске, но при первом входе в систему после запуска; если это неприемлемо, посмотрите на RunServices .

    Linux: Что такое установщик? И ожидали ли вы одного из способов сделать это для каждой семьи дистрибутивов? Этот праймер дает вам большую часть необходимой вам информации, за исключением того, что вы точно знаете, что хотите делать в каждом дистрибутиве. В общем, если вы просто хотите, чтобы ваш скрипт запускался один раз и ушел, и есть rc.local.d , и вам просто нужно удалить ссылку. В противном случае вам нужно создать скрипт rc.d , установить его в нужное место и запустить правильную команду chkconfig , или вам нужно будет отредактировать rc.local для запуска вашего скрипта. Но самое простое: просто поместите английский текст в файл INSTALL, чтобы люди могли это сделать. В конце концов, когда кто-то решает сделать DEB для Ubuntu или RPM для Redhat или что-то еще, они подойдут для своего дистрибутива и либо отправят вам патч, либо сохранят его отдельно.