2014-10-05 68 views
1

我试图在单独的进程中运行'runserver'(和testserver),并在服务器仍在运行时读取主输出(我想要做一些自动e2e测试)。 我无法设法将写入stdout存储到文件。我使用的Python 3.4和1.7的Django用Popen捕获django runserver的stdout

from subprocess import Popen 
from time import sleep 
out = open('/tmp/o', 'w') 
p = Popen(['./manage.py', 'runserver'] , stdout = out) 
sleep(5) 
out.flush() 
p.terminate() 
p.wait() 
out.close() 
print(open('/tmp/o').read()) 
# stdout file is empty 

# Making sure the same command with stdout=None prints something 
Popen(['./manage.py', 'runserver']) 
# prints output as expected 
sleep(5) 
p.terminate() 
p.wait() 

我明明做错事,但我无法找到的文档或任何其他计算器问题的任何帮助。

感谢

米尔科

回答

3

,我发现我的答案在这里: https://code.djangoproject.com/ticket/19593#comment:4

设置变量PYTHONUNBUFFERED修复该问题

env = dict(os.environ, **{'PYTHONUNBUFFERED':'1'}) 

out = open('/tmp/o', 'w') 
p = Popen(['./manage.py', 'runserver', '-v', '3'] , stdout = out, env = env) 
环境