我有一个脚本
import os
os.system('python manage.py runserver')
脚本启动django服务器(无论它做什么,它都可以是任何评估,直到ctrl+c
或其他按键快捷键被按下)。
我想要的是以任何方式停止服务器,而不是通过pid杀死它。
我尝试了什么:
我尝试使用subprocess
lib及其kill
命令,如下所述:How to terminate a python subprocess launched with shell=True
但它没有帮助。我猜,原因是:我们不是杀死manage.py runserver
进程而是杀死评估python manage.py runserver
的进程。因此,在查杀过程后,服务器仍在运行。
我也尝试过使用terminate
方法:
p = subprocess.Popen('python manage.py runserver', stdout=subprocess.PIPE, shell=True)
time.sleep(5)
p.terminate()
我认为它应该以这种方式工作:服务器启动并在5秒后停止,但它永远不会停止。
有没有办法杀死这个过程?
答案 0 :(得分:3)
这听起来很可疑。请不要这样做!
Django建议使用WSGI允许Web服务器(Apache,NginX等)根据需要自动加载和卸载Django。 Here's how to do that。此外,Django的内置Web服务器不被视为secure or scalable。一般来说,不要这样做!
如果您不喜欢使用WSGI,您还可以执行proxypass with Apache,NginX等.Django服务器本身可以通过任意数量的系统服务工具进行管理,例如{{3 }或init.d。
要直接回答您的问题,您可以使用process.terminate()
来终止使用subprocess
启动的活动进程,但是当其他许多其他人使用python脚本运行您的服务器时,这是一个糟糕的主意很棒的工具。