簡體   English   中英

用Popen捕獲django runserver的stdout

[英]Capture stdout of django runserver with Popen

我試圖在一個單獨的進程中運行'runserver'(和testserver),並在服務器仍在運行時讀取main中的輸出(我想做一些自動e2e測試)。 我無法管理將stdout存儲到文件中。 我正在使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM