【发布时间】:2014-10-20 23:14:57
【问题描述】:
我有一个脚本
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 秒后停止,但它永远不会停止。
有没有办法杀死进程?
【问题讨论】:
-
您是否创建了一个新的流程组作为您链接的问题的答案所建议的?
runserver不会妖魔化服务器进程,因此配方应该可以工作。 -
如果您不从管道读取数据,请不要使用
stdout=PIPE。使用DEVNULL instead if you want to discard the output -
非常感谢!我刚刚再次尝试了我已链接的问题的答案,并且......一切正常。我不知道为什么它第一次不起作用,但现在它完全符合我的要求。因此,感谢您再次向我指出该问题,并再次感谢您提供 DENVULL(不受欢迎的输出是我的第二个问题)