1
我正在使用Django,並且我在機器上安裝了protoc
。我想自動編譯所有的一切應用程序目錄中找到的原文件,當我啓動服務器:在運行服務器期間在Django中編譯proto文件
./manage.py runserver ...
這可能嗎?
我正在使用Django,並且我在機器上安裝了protoc
。我想自動編譯所有的一切應用程序目錄中找到的原文件,當我啓動服務器:在運行服務器期間在Django中編譯proto文件
./manage.py runserver ...
這可能嗎?
我並不熟悉protoc
,但您可以使用runserver
做任何事情。您需要創建自定義runserver
django 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
和東西。
另外,無論如何,如果它本身退出,您顯然不需要終止進程。