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

我如何查看系统命令的输出。 例如:

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中运行该程序时,会给我一个黑屏,我看不到正在运行的命令。 我需要它,所以我可以查看它是否有效。 谢谢!

Solutions Collecting From Web of "在C ++中查看system()调用的输出"

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

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

如果成功,我不认为这些命令通常有任何输出。 尝试添加一个dir或pwd以列出您所在的目录。

如果你想从命令输出到程序进行处理,这是另一个问题。 你将不得不使用os特定的API,或者将输出重定向到你可以读取的文件。

尝试按照以下方法添加pause ,以便在每个命令之后等待 失败时,将显示错误消息。 成功时,将显示命令的实际输出( 如果有)

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

请注意,对system 每次调用都使用cmd.exe(如cmd /c [command] )来执行命令,而在一个命令中执行像PATH这样的env变量不会影响另一个命令。

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