在 C++ 中查看 system() 调用的输出

viewing output of system() call 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;

}

当我 运行 Visual Studio 中的程序时,它给我一个黑屏,我看不到 运行 中的命令。我需要它,这样我才能查看它是否有效。谢谢!

system 调用的输出应该显示在标准输出上。

我认为 os 如果命令成功,通常不会显示任何输出。尝试在后面添加 dir 或 pwd 以列出您所在的目录。

如果你想把命令的输出放到程序中进行处理那就是另外一个问题了。您将不得不使用 os 特定的 api,或者将输出重定向到您可以阅读的文件中。

使用 popen 而不是 system。请参阅此处的示例 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 );

然后

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

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

尝试如下添加 pause 以在每个命令后等待。失败时,将显示错误消息。成功时,将显示命令的实际输出,if any

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

请注意 eachsystem 的调用使用 cmd.exe(如 cmd /c [command] )来执行您的命令和环境变量,例如 PATH 在一个命令中不会影响另一个命令。

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