2013-01-03 61 views
1

我正在使用以下代碼來提取系統命令的輸出。 我還沒有在PATH變量中設置「pic」的路徑。並且我想要存儲 命令"which pic"的輸出,並且不想在控制檯上顯示它。使用popen提取系統命令的輸出

這裏是我的代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
using namespace std; 
int main() 
{ 
    FILE *fp; 
    int status; 
    char path[1035]; 
char *command = "which pic"; 


    /* Open the command for reading. */ 
    fp = popen(command, "r"); 
    if (fp == NULL) { 
    printf("Failed to run command\n"); 
    exit(0); 
    } 

    /* Read the output a line at a time - output it. */ 
    while (fgets(path, sizeof(path)-1, fp) != NULL) { 
    cout<<"<<<<<<<<<<,"<<endl; 
    printf("%s", path); 
    } 

    /* close */ 
    pclose(fp); 

    return 0; 
} 

,但它在控制檯顯示以下輸出:

which: no pic in(/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin) 
+0

你還沒有真正提出過一個問題,但是最有可能的一點是,'which'的這個輸出是標準錯誤而不是標準輸出。你會想要捕捉兩者。 – Angew

+0

cout <<和printf在相同的代碼! –

+0

@Angew你已經解決了我的問題:) – EmptyData

回答

1

運行"which pic 2>&1"作爲命令。您想要捕獲which的所有輸出,包括其錯誤(發送到stderr)。