A chamada do sistema não funciona como na linha de comando
-
19-09-2019 - |
Pergunta
Ok, eu tenho dois programas e um chama o outro usando executável de outro. Estou executando no terminal Ubuntu
Esta é a estrutura da pasta no lugar
.../src/pgm1/pgm1 .../src/pgm0/pgm0
PGM1 e PGM0 são executáveis.
É assim que eu chamo de outro executável
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);
....
Eu olhei e o CMD é gerado corretamente: ../pgm0/pgm0 yres 400 xres 400 infil
Portanto, se eu executar este comando da linha de comando, ele funcionará perfeitamente bem.
Se eu executá -lo usando o sistema chamado pendura e falhar em analisar o arquivo de entrada SPH0.0000.SC, tentei adicionar caminho completo (daí o caminho variável para cima)
Mas ainda não há sorte.
Qualquer idéia por que isso funcionaria na linha de comando e não da chamada do sistema dentro de outro executável ...
Apenas para deixar claro que funciona da linha de comando na pasta PGM1.
Obrigado
Solução
Você está usando >
o que significa algo para muitas conchas, mas suspeito não system
. Experimente isso:
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);
E deixe -nos saber como isso vai.