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

Фон

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

Вопросы

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

person taylor    schedule 22.02.2013    source источник
comment
Так какой у тебя вопрос?   -  person wRAR    schedule 22.02.2013
comment
Этот пост может удовлетворить ваши потребности.   -  person Octipi    schedule 22.02.2013
comment
@WinRAR Я только что добавил то, что, по моему мнению, может быть актуальным вопросом. Надеюсь, редактирование одобрено.   -  person xxmbabanexx    schedule 22.02.2013
comment
ты что-нибудь пробовал? так легко гуглить   -  person Drewdin    schedule 22.02.2013
comment
Не совсем справедливо проголосовать за это, поскольку кажется, что его спрашивают добросовестно...   -  person BenDundee    schedule 22.02.2013
comment
Я искал в Google, но все, что я мог найти, это вещи, специфичные для платформы.   -  person taylor    schedule 22.02.2013
comment
@taylor: Вам в значительной степени нужно использовать специфичные для платформы вещи для каждой платформы, которая вас интересует. Дело не только в том, что никто не удосужился все красиво упаковать, дело в том, что проблемы, с которыми вам нужно иметь дело, сильно различаются между Windows и Unix и довольно сильно различаются даже между разными Unix (особенно OS X по сравнению со всем остальным). Вы можете, конечно, написать свою собственную оболочку, которая работает для вашего конкретного варианта использования, что будет намного проще, чем полностью общая оболочка.   -  person abarnert    schedule 22.02.2013
comment
Спасибо, я просто не знал, есть ли у python встроенные функции для запуска скриптов при запуске или нет.   -  person taylor    schedule 25.02.2013


Ответы (1)


Вопрос 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
comment
Хорошо, это будет не так просто, как я думал, но, по крайней мере, я знаю, в каком направлении смотреть. Спасибо - person taylor; 22.02.2013