我正在使用Django,我在机器上安装了protoc
。我想在启动服务器时自动编译所有app目录中的所有proto文件:
./manage.py runserver ...
这可能吗?
答案 0 :(得分:0)
我对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
内容。
此外,无论如何,如果它自己退出,你显然不需要杀死它。