我正在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)
答案 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。来回传递参数(并在同一个浏览器选项卡中工作)是最好的方法。