2016-07-23 63 views

回答

0

我並不熟悉protoc,但您可以使用runserver做任何事情。您需要創建自定義runserverdjango admin command以覆蓋默認值。下面是一個示例:

import os 
import subprocess 
import atexit 
import signal 

from django.conf import settings 
from django.contrib.staticfiles.management.commands.runserver import Command\ 
    as StaticfilesRunserverCommand 


class Command(StaticfilesRunserverCommand): 

    def inner_run(self, *args, **options): 
     self.start_something() 
     return super(Command, self).inner_run(*args, **options) 

    def start_something(self): 
     self.stdout.write('>>> Starting something') 
     self.some_process = subprocess.Popen(
      '.....', 
      shell=True, 
      stdin=subprocess.PIPE, 
      stdout=self.stdout, 
      stderr=self.stderr, 
     ) 

     self.stdout.write('>>> Some process on pid {0}'.format(self.some_process.pid)) 

     def kill_some_process(pid): 
      self.stdout.write('>>> Closing some process') 
      os.kill(pid, signal.SIGTERM) 

     atexit.register(kill_some_process, self.some_process.pid) 

請注意,您需要從django.contrib.staticfiles.management.commands.runserver,而不是從django.core.management.base得到這個,或者你失去collectstatic和東西。

另外,無論如何,如果它本身退出,您顯然不需要終止進程。