La llamada del sistema no funciona como en la línea de comandos
-
19-09-2019 - |
Pregunta
Ok, tengo dos programas, y uno llama a otro usando ejecutable desde otro. Lo estoy ejecutando en Ubuntu Terminal
Esta es una estructura de carpeta en su lugar
.../SRC/PGM1/PGM1 .../SRC/PGM0/PGM0
PGM1 y PGM0 son ejecutables.
Así es como llamo al otro ejecutable
char cmd[1000];
string path = "/home/usr/src/";
// call pgm0 for each instance...
sprintf( cmd, "../pgm0/pgm0 xRes 400 xRes 400 inFile tmp_output/%s.%04d.sc > tmp_output/%s.%04d.ppm", g_outFile.c_str(), ti, g_outFile.c_str(), ti);
cout << cmd << endl;
system (cmd);
....
Miré y el CMD se genera correctamente: ../pgm0/pgm0 años 400 xres 400 infile tmp_output/sph0.0000.sc> tmp_output/sph0.0000.ppm
Entonces, si ejecuto este comando desde la línea de comando, funciona perfectamente bien.
Si lo ejecuto con el sistema, llame, colgada y no puede analizar el archivo de entrada SPH0.0000.SC, intenté agregar ruta completa (por lo tanto, la variable de ruta hacia arriba)
Pero aún no hay suerte.
Cualquier idea por qué funcionaría esto desde la línea de comandos y no desde el sistema llamar dentro de otro ejecutable ...
Solo para aclarar, funciona desde la línea de comandos en la carpeta PGM1.
Gracias
Solución
Tu estas usando >
lo que significa algo para muchos conchas, pero sospecho que no system
. Prueba esto:
snprintf( cmd, sizeof cmd,
"/usr/bin/bash -c '../pgm0/pgm0 xRes 400 xRes 400"
" inFile tmp_output/%s.%04d.sc > tmp_output/%s.%04d.ppm'",
g_outFile.c_str(), ti, g_outFile.c_str(), ti);
Y háganos saber cómo va eso.