python - 使用 Popen 捕获 django runserver 的标准输出

标签 python django popen

我正在尝试在单独的进程中运行“runserver”(和testserver),并在服务器仍在运行时读取主程序中的输出(我想做一些自动e2e测试)。 我无法将写入标准输出存储到文件中。我正在使用 python 3.4 和 django 1.7

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()

我显然做错了什么,但我在文档或任何其他 stackoverflow 问题中找不到任何帮助。

谢谢

米尔科

最佳答案

我在这里找到了答案: 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)

关于python - 使用 Popen 捕获 django runserver 的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207033/

相关文章:

python - Shap LSTM (Keras, TensorFlow) ValueError : shape mismatch: objects cannot be broadcast to a single shape

django - django Rest auth 和 React Native 的问题

python - 如何处理 Django 的 Queryset 效率低下?

c++ - _popen 结果为字符串 : a special case

python - plt图python的X轴困惑在一起

python - 如何捕获应用程序的命令行输出

python - Django URL 中 '' 的 NoReverseMatch

python - 从 subprocess.Popen 调用 "source"命令

c - 重定向(重定向的标准错误)到标准输出

python - 如何在C++ Builder 2010(非Delphi)应用程序中嵌入Python?