Вопрос 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 с сопроводительным списком запуска. Это описано в разделе Создание демонов и агентов запуска< /а>. Вы не должны пытаться сделать это, если вы не читали эту статью, и вы уже знаете, как, если вы читали эту статью, так что больше нечего сказать.
Windows: официальный способ сделать это объясняется в Ключи реестра Run и RunOnce. Опять же, вам не следует делать это, не прочитав эту статью, а после прочтения статьи это довольно очевидно, за исключением двух моментов: во-первых, из четырех ключей это ключ запуска HKLM. Во-вторых, в современных Windows это запускается не при запуске, а при первом входе в систему после запуска; если это неприемлемо, посмотрите вместо этого RunServices
.
Linux: что такое установщик? И вы ожидали, что один способ сделать это для каждого семейства дистрибутивов? Этот учебник дает вам большую часть необходимой информации, за исключением того, что вы точно знаете, что вы хотите делать в каждом дистрибутиве. В общем, если вы просто хотите, чтобы ваш скрипт запустился один раз и завершился, и там есть rc.local.d
, и вам просто нужно кинуть туда ссылку. В противном случае вам нужно либо создать rc.d
скрипт, установить его в нужное место и запустить правильную chkconfig
команду, либо вам нужно отредактировать rc.local
для запуска вашего скрипта. Но самое простое: просто поместите английский текст в файл INSTALL, чтобы люди сделали это. В конце концов, когда кто-то решит сделать DEB для Ubuntu или RPM для Redhat или что-то еще, он сделает все правильно для своего дистрибутива и либо отправит вам патч, либо будет поддерживать его отдельно.
person
abarnert
schedule
22.02.2013