2009-11-12 9 views
0

Ok, j'ai deux programmes, et un appelle un autre en utilisant un exécutable d'un autre. Je cours sur la borne Ubuntul'appel système ne fonctionne pas comme dans la ligne de commande

Ceci est la structure du dossier en place

.../src/PGM1/PGM1 .../src/pgm0/pgm0

PGM1 et pgm0 sont executables .

Voilà comment j'appelle l'autre exécutable

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); ....

J'ai regardé et le cmd est généré correctement: ../pgm0/pgm0 Yères 400 xRes 400 inFile tmp_output/sph0.0000.sc> Par conséquent, si j'exécute cette commande à partir de la ligne de commande, cela fonctionne parfaitement.

Si je le lance en utilisant le système se bloque et l'appeler ne parvient pas à analyser le fichier d'entrée sph0.0000.sc j'ai essayé d'ajouter le chemin complet (donc variable de chemin vers le haut)

Mais toujours pas de chance.

Toutes les idées pourquoi les travaux de la ligne de commande et non pas d'appel système dans un autre exécutable ...

juste pour le rendre clair, il fonctionne de la ligne de commande dans le dossier PGM1.

Merci

+0

Cela ressemble à un problème de chemin. Qu'est-ce que string path = ... dans la source? Peut-être que vous voulez chdir là d'abord? – ataylor

+0

chemin de la chaîne a chemin absolu au dossier où les exécutables sont ... je l'ai ajouté là pour essayer avec /home /.../src/pgm0 au lieu ../pgm0 mais je l'ai retiré de sprintf pour le rendre plus simple lire – grobartn

+0

Est-ce votre pwd d'où vous exécutez ce programme compilé un répertoire frère de pgm0 dir et votre répertoire actuel a tmp_output sous-répertoire? –

Répondre

1

Vous utilisez > ce qui signifie quelque chose à beaucoup de coquilles, mais je soupçonne de ne pas system. Essayez ceci:

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); 

Et dites-nous comment ça se passe.