2016-08-01 5 views
1

Я пытаюсь запустить скрипт python в фоновом режиме и слушать команды. Например, если я запустил свой скрипт:Отправлять команды на запуск сценария, запустив его с помощью флагов

python my_script.py он начнет работать (и ждет команд).

Тогда я хочу, чтобы запустить:

python my_script.py --do_something, открыть другой процесс питона, и он будет работать функция do_something() в предыдущем процессе.

Я видел, как это работает в таких программах, как PDPlayer, где флаг --play заставляет игрока начать воспроизведение видео. Можно ли это сделать и в python?

Я знаю, как обрабатывать аргументы командной строки, используя argparse. Мне нужна помощь в отношении связи между двумя процессами python.

Кроме того, я планирую использовать приложение cx_freeze, поэтому PID приложения можно найти с помощью psutil, выполнив поиск имени исполняемого файла.

Спасибо.

Кстати, я использую Windows ...

+0

Это зависит от ОС. На компьютерах POSIX вы можете запустить его как демон, который реагирует на сигналы. В Windows это будет услуга и т. Д. –

ответ

1

Это может быть сделано, если вы храните оригинальный сценарий Pid где-нибудь. Когда вы запускаете свой скрипт с некоторым флагом, вы отправляете сигнал, который должен быть правильно обработан основным сценарием. Начните поиск здесь https://docs.python.org/2/library/signal.html

+0

Спасибо, я думаю, это то, что я имел в виду. Кстати, скажем, я cx_freezed приложение python, и теперь это исполняемый файл. Могу ли я получить pid по имени его процесса? – Omer

+1

Я никогда не работал с Windows, поэтому не могу быть уверен. В linux вы можете сделать это, просто выполнив 'ps'. Вы можете написать pid в каком-то файле, когда начинаете свой оригинальный скрипт, и читаете его при запуске скрипта с аргументами, это точно –

1

Есть две вещи, которые необходимо выполнить: вам нужно обрабатывать флаги командной строки, и вам нужно отправлять сигналы другому процессу. Для флагов вы можете использовать библиотеку argparse или просто sys.argv.

Для отправки сигналов вам потребуется идентификатор процесса (pid) уже запущенного процесса. Под Linux вы можете позвонить ps и проверить, есть ли другой экземпляр запущенного скрипта. Если есть, отправьте ему сигнал.

Другая альтернатива обработке сигналов - DBus. Тем не менее, это менее кросс-платформенный способ.

Смежные вопросы