LINUX.ORG.RU

Как обработать вывод скрипта при запуске в программе.


0

0

В приложении при помощи ф-ии system(«test.pl»), запускается скрипт на perl. Скрипт на perl выдает все на стандартный вывод, как можно в программе обработать эти данные. Хотелось бы что бы весь вывод шел например в stringstream.


Судя по желанию получить вывод в stringstream полагаю речь идёт о C++? Тогда можно воспользоваться мое старой библиотекой: http://code.google.com/p/popenplusplus/. Там как раз по ссылке схожий пример для демонстрации использования.

archimag ★★★
()

Я делаю так:

  int fds[2];
  pid_t pid;
  int status;

  pipe(fds);

  pid = fork();
  if( pid == 0 )
  {
    close(fds[0]);
    dup2( fds[1], STDOUT_FILENO );
    close(fds[1]);
    execl( "./mega_script", NULL );
  }
  else
  {
    char buf[BUF_SIZE] = {0};
    close(fds[1]);
    read(fds[0], buf, BUF_SIZE);
    close(fds[0]);

    waitpid( pid, &status, 0 );
  }
kulti ★★
()

man popen

ну или вручную пайпы создать как выше показали

dilmah ★★★★★
()
Ответ на: комментарий от const86

Мерзость, но если нужно для одной конкретной задачи в конкретный момент, а потом можно выкинуть - вариант.

tia
()
Ответ на: комментарий от tia

>для одной конкретной задачи в конкретный момент

Именно так все программы (и не только программы) и делаются. Как бы срочное временное решение, так как начальство требует поскорее. И потом все эти «временные решения» остаются насовсем.

anonymous
()
Ответ на: комментарий от kulti

> Я делаю так:

Не хватает проверки на ошибки, хотя бы fork и exec. А что будет, если мегаскрипт захочет вывести намного больше данных, чем BUF_SIZE? Идея-то правильная, но либо её аккуратно реализовывать, либо уж использовать предложенную выше мерзость.

const86 ★★★★★
()
Ответ на: комментарий от const86

Это уже детали, которые топик-стартер сам додумает или понаступает на грабли и в итоге сделает правильно. А мерзость такая мерзость...

kulti ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.