Я хочу в реальном времени прочитать вывод подпроцесса, вызванного из формы в представлении.Вот мои views.py:
@login_required
@condition(etag_func=None)
def sync_form(request):
# do things to validate form
return HttpResponse(sync_job(request, job_id, src, dest))
def sync_job(request, job_id, src, dest):
# we check the arguments here
sync_process = Popen([str(command), str(arguments), str(src), str(dest)], stdout=PIPE)
for line in sync_process.stdout:
yield simplejson.dumps(line.rstrip())
syncoutput,syncerror = sync_process.communicate()
check.log = syncoutput
check.save()
Я прочитал здесь , что функция etag может предотвращать потоковую передачу, поэтому ее лучше отключить.Вот что мне нужно для получения данных json:
$.ajax({
url: '{% url monitor %}',
dataType: 'json',
type: 'get',
success: function(data) {
$('#sync_response').html(data);
}
});
monitor - это URL-адрес приложения, в котором есть форма для отправки запроса.Когда я запрашиваю подпроцесс, он остается в том же URL-адресе (http://localhost:8000/monitor) и просто выдает мне текстовый вывод, подобный следующему:
"sending incremental file list""""sent 116 bytes received 12 bytes 256.00 bytes/sec"
Можно ли передавать данные с использованием этого подхода?Если так, что я делаю не так? Спасибо.