Как взаимодействовать между программой на сервере и пользователем через веб-страницу в реальном времени - PullRequest
1 голос
/ 18 июля 2011

Позвольте мне начать с примера:
Существует программа c ++, которая может быть запущена на моем сервере, программа называется «Угадай число», что означает каждый раз, когда она запускается,

  1. сначала он случайным образом сгенерирует целое число от 1 до 100.
  2. затем мне нужно, чтобы пользователь угадал число и передал его мне через веб-страницу, форму или что-то в этом роде.
  3. Теперь я хочу передать номер программе, а затем программа скажет мне, больше он или меньше.
  4. затем я размещаю информацию на веб-странице, чтобы сообщить пользователю, а затем делаю следующее предположение.

Я могу написать программу.и я знаю, как передать первый аргумент и вернуть информацию, но не знаю, как взаимодействовать на следующих шагах.то есть

Как передать аргументы программе REAL-TIME и получить вывод?

, чтобы сделать это более наглядно:

  1. я использую subprocess в python, чтобы запустить программу с первым аргументом и получить вывод.
  2. программа c ++ использует вводы и выводы std, такие как while (!check(x)) scanf("%d",&x);, и вcheck(int x), я использую if (x>rand_num) printf("too big\n"); для вывода.

Ответы [ 2 ]

0 голосов
/ 22 июля 2011

Наконец я решил эту проблему следующим образом:

  1. Используйте pexpect для взаимодействия с этой программой.
  2. Используйте unbuffer для немедленного получения вывода.

Вот пример

import pexpect

p = pexpect.spawn('unbuffer',['-p','./guess'])
l = 1
r = 100
m = 0
while (p.isalive()):
    p.expect('')
    p.expect(p.buffer[-1])
    print p.before
    print m
    if (p.before.find('small')>0):
        l = m
    elif (p.before.find('big')>0):
        r = m
    m = (l+r)/2;
    p.sendline(str(m))
print p.buffer
print 'Program ended!'

и думаю.cpp

#include <cstdio>
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main(){
    srand(int(time(0)));
    int n = (rand() % 100) + 1;
    int x;
    printf("The number you are to guess is between 1 and 100.\n");
    do{
        scanf("%d",&x);
        if (x<n) printf("Too small!\n");
            else if (x>n) printf("Too big!\n");
    }   while (x!=n);
    printf("You got it!\n");
    return 0;
}
0 голосов
/ 18 июля 2011

Это звучит очень похоже на домашнее задание, но даже с этим списком у вас впереди много работы для сомнительной награды, так что мы идем.

  • Ваша программа на C ++ должна прослушивать сокет
  • Ваша программа на Python должна прослушивать веб-сокет, а также иметь открытое соединение с программой C ++ через сокет C ++.
  • Я бы предложил что-то вроде web.py для вашего веб-фреймворка
  • Ваша программа web.py будет принимать запросы XMLHTTP по URL-адресу
  • ваша веб-страница будет отправлять запросы через этот запрос XMLHTTP и отправлять результаты обратно на веб-страницу.

Простой способ сделать это во внешнем интерфейсе - это команды jquery ajax; они получат ваш URL web.py, который проверит ввод, вызовет функцию для отправки его в сокет C ++, получит ответ и отправит его обратно в ответ на ваш запрос jquery.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...