2016-09-14 3 views
3

Я использую bokeh для отображения данных датчиков в локальной сети. Bokeh запускается из моего приложения python, используя popen: Popen("bokeh serve --host=localhost:5006 --host=192.168.8.100:5006", shell=True)Как остановить сервер bokeh?

Я хотел бы закрыть сервер bokeh из приложения. Однако я ничего не могу найти в documentation. Также bokeh serve --help не дает никаких подсказок, как это сделать.

EDIT: на основе принятого ответа я придумал следующее решение:

 self.bokeh_serve = subprocess.Popen(shlex.split(command), 
          shell=False, stdout=subprocess.PIPE) 

Я использовал self.bokeh_serve.kill() для окончания процесса. Может быть, .terminate() было бы лучше. Я попробую.

ответ

1

Не зная бок и предполагая, что вы используете Python> = 3.2 или Linux, вы могли бы попытаться убить процесс с SIGTERM, SIGINT или SIGHUP, используя os.kill() с Popen.pidили даже лучшеPopen.send_signal(). Если у bokeh есть соответствующие обработчики сигналов, он даже отключится.

Однако вам может быть лучше использовать опцию shell=False, потому что с shell=True сигнал отправляется в оболочку вместо фактического процесса.