如何退出调用Django服务器的子进程?

时间:2019-01-03 20:41:40

标签: python django server subprocess port

我正在localhost:8000上的django服务器上运行otree erperiment,我想运行一个子进程来启动8080上的另一台django服务器。 如果以第一顺序调用子流程,则浏览器选项卡将不会打开。我怎样才能解决这个问题? 如何退出新服务器(和浏览器选项卡)并回到我的第一个服务器?

这是一个oTree实验。在这个实验中,我需要打开另一个django项目,特别是我想经营一个django-oscar商店。

class MyPage2(Page):

    def before_next_page(self):
       os.environ['DJANGO_SETTINGS_MODULE'] = 'shop.settings'
       subprocess.call(['py', 'shop2/manage.py', 'runserver', '0.0.0.0:8080'], shell=True)
       webbrowser.open('http://localhost:8080', new=2)

2 个答案:

答案 0 :(得分:0)

我不确定您要使用的是什么,但是如果您要终止子进程,只需按如下所示调用os.killpg
尝试以下代码,将call替换为Popen

import os
import signal
import subprocess

# The os.setsid() is passed in the argument preexec_fn so
# it's run after the fork() and before  exec() to run the shell.
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid) 

os.killpg(os.getpgid(pro.pid), signal.SIGTERM)  # Send the signal to all the process groups

答案 1 :(得分:0)

解决这个问题有点不同。 我放弃了子流程,而是使用 django REST 框架创建了一个 API。来回传递参数(并在同一个浏览器选项卡中工作)是最好的方法。