2015-01-22 35 views
5

Sistem komutunun çıktısını nasıl görebilirim? Ör: Visual Studio'da programı çalıştırdığınızdasistem çıkışını görüntüleme() C++ içinde ara.

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; 

} 

bana bir siyah ekran verip komut olmak koşmak göremez. İhtiyacım var, çalışıp çalışmadığını görebiliyorum. Teşekkürler!

+0

Muhtemelen bir çıkış yönlendirmesi sorunu. 'System()' işlevi 'system()' işlevinin argüman dizesini çalıştırmak için komut yorumlayıcısını kullanır; bu nedenle komut yorumlayıcısının, komutunuzdan çıktının konsoldan çıkmaması için standartınızı devralmaması olabilir. penceresi. Başka bir şey, kullandığınız komutların herhangi bir çıktı üretmemesi olabilir. "echo" komutu gibi farklı bir komut deneyin, sistem gibi bir şey yapın ("echo bu çıktı"). –

+2

Ben bu işe yaramazsa eminim set'-ing (veya 'cd') system'' bir çağrıyla POSIX'e & Linux üzerinde system' ('sonraki çağrısı etkileyecek' emin değilim. Ama Don Windows bilmiyorum). –

+1

yerine 'system' çağıran (... örneğin [_chdir] (https://msdn.microsoft.com/en-us/library/bf7fwze1.aspx)) bazı işletim sistemi API kullanarak düşünün mü? Veya [POCO] (http://pocoproject.org/), [Qt] (http://qt-project.org/) veya belki de Boost gibi bir çerçeve kullanın. –

cevap

7

Kullanım yerine system arasında popen. Burada örnek Bkz 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); 

sonra

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

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

stdout'ta görünmelidir bir system çağrısının çıktı.

Ben başarılı olurlarsa o komutlar genellikle görüntülemek için herhangi bir çıktı var sanmıyorum. Başka bir konudur işlenmek üzere programa komutları çıktı almak istiyorsanız.

içindedir dizin listelemek için sonra bir dir ya pwd eklemeyi deneyin. Os özel api kullanmanız veya çıktıyı okuyabileceğiniz bir dosyaya yönlendirmeniz gerekecektir.

+0

Bir "sistem çağrısı" (https://en.wikipedia.org/wiki/System_call) 'sistem' kitaplığı işlevinden çok farklı bir şey olduğundan "sistem" i yedekledim –

0

deneyin her komutun ardından beklenecek aşağıda pause ekledi. Başarısızlık durumunda, hata mesajı görüntülenecektir. Başarı durumunda, komuttan gelen gerçek çıktı, ise gösterilecektir. system her çağrı (cmd /c [command] gibi) cmd.exe'yi kullanan o

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

Not başka etkilemez bir komuta PATH gibi komuta ve env değişkenleri yürütmek.

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