2015-01-22 28 views
5

Come visualizzare l'output di un comando di sistema. Es:visualizzazione dell'output della chiamata system() in C++

int _tmain(int argc, _TCHAR* argv[]) { 

    system("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin"); 
    system("cd C:/thisfolder/"); 

    std::cin.get(); 
    return 0; 

} 

quando si esegue il programma in Visual Studio mi dà una schermata nera e non riesco a vedere l'essere i comandi utilizzati. Ne ho bisogno, così posso vedere se ha funzionato o meno. Grazie!

+0

Probabilmente un problema di reindirizzamento dell'output. La funzione 'system()' utilizza l'interprete dei comandi per eseguire la stringa argomento della funzione 'system()', quindi potrebbe essere che l'interprete dei comandi non stia ereditando lo standard in modo che l'output dal comando non vada alla console finestra. Un'altra cosa potrebbe essere che i comandi che stai usando non generano alcun output. prova un comando diverso come il comando 'echo', quindi fai qualcosa come' system ("echo this is output") '. –

+2

Non sono sicuro che 'set'-ing (o' cd') con una chiamata a 'system' influenzerebbe la prossima chiamata a' system' (su POSIX e Linux, sono sicuro che non funziona. Conosco Windows). –

+1

Hai preso in considerazione l'utilizzo di alcune API del sistema operativo (ad esempio [_chdir] (https://msdn.microsoft.com/en-us/library/bf7fwze1.aspx) ...) anziché chiamare 'system'? O usare qualche framework come [POCO] (http://pocoproject.org/), [Qt] (http://qt-project.org/), o forse Boost. –

risposta

7

Utilizzare popen anziché system. Si veda l'esempio qui https://msdn.microsoft.com/en-us/library/96ayss4b.aspx

char psBuffer[128]; 
FILE *pPipe; 

if((pPipe = _popen("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin", "rt")) == NULL) 
    exit(1); 

poi

while(fgets(psBuffer, 128, pPipe)) { 
    printf(psBuffer); 
} 

if (feof(pPipe)) 
    printf("\nProcess returned %d\n", _pclose(pPipe)); 
1

L'uscita di una chiamata system deve essere visualizzata su stdout.

Non penso che quei comandi generalmente abbiano un output da mostrare se hanno successo. Prova ad aggiungere una directory o pwd dopo per elencare la directory in cui ti trovi.

Se si desidera ottenere l'output dai comandi nel programma per l'elaborazione, si tratta di un altro problema. Dovrai usare l'API specifica di os, o magari reindirizzare l'output in un file che puoi leggere.

+0

Ho riarchicato "sistema" poiché una [chiamata di sistema] (https://en.wikipedia.org/wiki/System_call) è qualcosa di molto diverso dalla funzione di libreria 'system' –

0

Prova ad aggiungere pause come di seguito per attendere dopo ogni comando. In caso di errore, verrà visualizzato un messaggio di errore. In caso di successo, verrà visualizzato l'output effettivo del comando, , se disponibile.

system("set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin & pause"); 
system("cd C:/thisfolder/ & pause"); 

noti che ogni chiamata a system utilizza cmd.exe (come cmd /c [command]) per eseguire le variabili di comando e env come PATH in un unico comando non avrà effetto un'altra.

cmd.exe /c set PATH=%PATH%;C:/Program Files (x86)/myFolder/bin 
cmd.exe /c cd C:/thisfolder/ 
Problemi correlati