Задать вопрос

Как правильно организовать управление запущенным python-скриптом?

Мне необходимо реализовать небольшое приложение со своим собственным CLI, которое принимает команды: start - запустить сервер, stop - остановить сервер, statistics - вывести статистику.
Хочу добиться результата вида :
$ myserver.py start
$ myserver.py statistic
$ myserver.py stop

но не знаю как. Пробовал сделать через daemon A simple unix/linux daemon in Python, но не получилось собирать статистику. Может мне нужно смотреть в сторону subprocess?
Подскажите как правильно организовать управление?

Пока мое решение выглядит так:
class MyReceiver(object):

    def __init__(self):
        self.run = False
        
    def start(self):
        if self.run:
            print "The server is already running"
            return
        self.thread = threading.Thread(target=worker)
        self.thread.daemon = True
        self.thread.start()
        self.run = True

    def stop(self):
        if self.run:
            self.thread.join()
            self.run = False

    def get_statistic(self):
        return "statistic here"

def main():
    print "Hello! Use: start|stop|restart|statistic|exit"
    reciver = MyReceiver()
    reciver.start()
    try:
        while True:
            command = str(raw_input('myserver:'))
            if 'start' == command:
                reciver.start()
            elif 'stop' == command:
                reciver.stop()
                reciver.get_statistic()
            elif 'restart' == command:
                reciver.stop()
                time.sleep(.5)
                reciver.start()
            elif 'statistic' == command:
                reciver.get_statistic()
            elif 'exit' == command:
                reciver.stop()
                sys.exit(0)
            else:
                print "Unknown command"
            time.sleep(.2)
    except KeyboardInterrupt:
        reciver.stop()
        sys.exit(1)
  • Вопрос задан
  • 621 просмотр
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sly_tom_cat
@Sly_tom_cat
.
Зачем raw_input?

Есть же sys.argv и более продвинутая библиотека argparse

Можно просто
if len(sys.argv) = 2:
  if sys.argv[1] = 'start':
    ....
  elif sys.argv[1] = 'stop':
    ....
  else:
    print('неизвестная команда')
else:
  print('неверное количество аргументв')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы