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

viewing output of system() call in C++

本文关键字:调用 输出 系统 C++      更新时间:2023-10-16

如何查看系统命令的输出。前任:

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

使用 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 %dn", _pclose( pPipe ) );

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

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

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

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

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

请注意,每次调用system都使用 cmd.exe( 作为 cmd /c [command] ) 来执行您的命令,并且 env 变量(如一个命令中的 PATH)不会影响另一个命令。

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