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

时间:2015-01-22 15:48:31

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

system来电的输出应显示在stdout上。

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

如果要将命令的输出提供给程序进行处理,这是另一个问题。您必须使用特定于操作系统的API,或者可能将输出重定向到您可以阅读的文件中。

答案 2 :(得分:0)

尝试添加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/