2009-11-05 19 views
53

Necesito ejecutar un programa y recuperar su salida stdout en C++. Me gustaría que mi código también sea multiplataforma.¿Dónde está Boost.Process?

Al haber descubierto recientemente el maravilloso mundo de las bibliotecas Boost C++ para todas sus necesidades de plataformas cruzadas, pensé que iría a boost.org y leería la documentación de Boost.Process. Para mi sorpresa, ¡no estaba allí! Luego procedí a averiguar qué nombre le dio Boost a su biblioteca multiplataforma para iniciar procesos externos, pero no lo he podido encontrar hasta ahora.

Una búsqueda en Google me llevó a Julio M. Merino Vidal's Boost.Process, que parece ser la biblioteca no oficial de Boost que estaba buscando. Por extraño que parezca, parece que no puedo encontrar un enlace de descarga en ese sitio web. También parece que no ha habido novedades recientes con respecto al proyecto.

Finalmente pude encontrar un enlace de descarga para Vidal's Boost.Process en un external site y lo usaré por ahora, pero estoy bastante sorprendido por el esfuerzo que tuve que poner para tener en mis manos una plataforma cruzada biblioteca C++ para interactuar con procesos externos.

Entonces, ¿por qué no hay un Boost.Process oficial? Parece que sería una adición muy valiosa. ¿O estoy pasando por alto totalmente la solución obvia aquí? ¿Podría sugerir otras bibliotecas multiplataforma para gestionar el inicio simple y la interacción con procesos externos?

+1

Felicitaciones por el descubrimiento de rocas - Boost! – vehomzzz

+0

Boost rocks, pero aún no hay una biblioteca oficial de Process. Por lo que vale, utilicé con éxito la biblioteca de Poco Process en el pasado (Google para las bibliotecas de Poco C++ para más información). – StackedCrooked

Respuesta

29

Julio M. Merino Vidal, quien es, creo, el autor original, escribió en this 2007 post que no tuvo tiempo de completarlo.

El desarrollo fue asumido por Boris Schaeling. Esta es la versión que encontró al http://www.highscore.de/boost/process/. De acuerdo con este post, todavía lo está desarrollando activamente.

Hay otra versión, por Ilya Sokolov.

Para su otra pregunta:

Podría tal vez sugerir otras bibliotecas multiplataforma para la gestión de partida sencilla y de iteración con los procesos externos?

se puede ver en this wiki page alternativas de listado.

Dependiendo de sus necesidades, popen() también podría hacer el trabajo.

+7

Solo para completar la información aquí, vincularé el [calendario de revisión] (http://www.boost.org/community/review_schedule.html) en el que se afirma que boost.process ha sido [rechazado] (http: // lists.boost.org/boost-announce/2011/03/0292.php). – dave

+3

Esta respuesta ya no está actualizada, consulte la respuesta wiki de la comunidad. – Klaim

1

Partes de Boost.Process están disponibles en varias bibliotecas independientes en Boost ahora: Boost.Interprocess, opciones de programa, etc.

3

Parece que Boost.Process está en el sandbox area, lo que sugeriría que se ha sido propuesto para su inclusión y probablemente todavía se esté trabajando en él, pero no se ha considerado estable, documentado y/o lo suficientemente útil como para incluirlo en la versión principal de la mejora.

4

Otra opción podría ser la estructura modular POCO, ver Process::launch() que tiene una sobrecarga que lleva Pipes para en, cabo y de error.

8

Boost Process fue uno de los proyectos de Google Summer of Code este año. El sitio web del GSOC 2010 Boost Process es http://www.highscore.de/boost/gsoc2010/.

La biblioteca aún no es oficial, pero sus desarrolladores consideran que es lo suficientemente estable como request formal review.

+2

http://lists.boost.org/Archives/boost/2010/08/169915.php – vladr

+2

Se rechazó debido a varias inquietudes, espero que las aborden y vuelvan a enviarlas. – maep

54

Boost.Process era accepted for inclusion into Boost on November 9, 2016; y has been included in the 1.64 lanzado el 19 de abril de 2017. ¡Boost.Process es ahora una biblioteca oficial de Boost!

documentación Está disponible aquí: http://www.boost.org/doc/libs/1_64_0/doc/html/process.html


Para el registro, las fuentes que fueron revisados ​​del 27 de octubre, el año 2016 hasta el 5 de noviembre de, el año 2016 están disponibles en GitHub:

descarga: https://github.com/klemens-morgenstern/boost-process

Manual: http://klemens-morgenstern.github.io/process/index.html


Puede encontrar en la web varias versiones anteriores de esta biblioteca. Todos ellos son más o menos incompatibles:

  • versión 0.5 (la última, a partir del 3 Dic 2012)

descarga: http://www.highscore.de/boost/process0.5/process.zip

Manual: http://www.highscore.de/boost/process0.5/index.html

  • Versión GSOC2010

descarga: http://www.highscore.de/boost/gsoc2010/process.zip

Manual: http://www.highscore.de/boost/gsoc2010/

  • Versión 0,31

descarga: http://www.highscore.de/boost/process.zip

manual1: http://www.highscore.de/boost/process/

Manual2: http://www.highscore.de/cpp/process/

creo que es el mismo que en http://svn.boost.org/svn/boost/sandbox/process/boost/

  • I. S. Versión 0.1-0.4

descarga: https://github.com/boost-vault/Process

  • Versión 0?

descarga: http://www.netbsd.org/~jmmv/process.zip

Manual: http://www.netbsd.org/~jmmv/process/

Hay otra versión que se parecen a las ramas: https://github.com/JeffFlinn/boost-process y https://github.com/boost-vault/Process.

Para una historia parcial del proyecto, un vistazo a http://www.highscore.de/cpp/process/#introduction

2

para julio 2015 parece que ha sido Boost.Processscheduled para el Impulso revisión formal de nuevo.