파이썬 :c 또는 C++에 subprocess.getoutput()과 같은 함수 또는 메서드가 있습니까?
이printf("Active Device:%s",getsystemoutput("ip link|grep \"state UP\"|cut -d : -f 2|cut -d \' \' -f2"));
파이썬 :c 또는 C++에 subprocess.getoutput()과 같은 함수 또는 메서드가 있습니까?
이printf("Active Device:%s",getsystemoutput("ip link|grep \"state UP\"|cut -d : -f 2|cut -d \' \' -f2"));
처럼 보일 수있는 함수 getsystemoutput()
은 다음과 같습니다 :
char *getsystemoutput(char *cmd)
{
static char output[1024];
FILE *fp;
if((fp = popen(cmd, "r")) == NULL)
return "";
if(fgets(outout, sizeof output, fp) == NULL)
strcpy(output, "");
pclose(fp);
return output;
}
print("Active Device:"+subprocess.getoutput("ip link|grep \"state UP\"|cut -d : -f 2|cut -d \' \' -f2"))
내가이 작업을 수행하여 C에서 That⬆ 같은 출력을 얻을 수는 C를? : 이 버전은 오류 발생시 빈 문자열을 반환하고 출력용 정적 버퍼를 사용하기 때문에에서 쉽게 사용할 수 있습니다.그러나 일반적인 목적을 위해 나는 오류시 NULL을 반환하고 output
+ 인수의 크기를 전달할 것을 제안합니다. pclose()
의 결과를 확인하여 호출 된 명령의 종료 상태를 판별 할 수도 있습니다. 루프가 없으면 첫 번째 출력 만 반환합니다.
표준 C는 외부 프로세스를 실행하고 표준 출력과 표준 오류를 수집하여이를 문자열로 반환하는 기능이 없습니다. 실제로 정책의 문제로 표준 C는 명시 적으로 메모리를 할당하는 것보다 함수가 아닌 동적으로 할당 된 메모리를 반환하는 함수를 제공하지 않습니다. POSIX의 환경에서
, 당신은 당신이 쉘 명령의 표준 출력을 읽을 수있게하는FILE *
을 제공하기 위해
popen()
에 의존 할 수
FILE *file = popen("ip link | grep 'state UP' | cut -d : -f 2 | cut -d ' ' -f2",
"r"));
if (file == NULL) {
// handle error
}
그런 다음 출력 스스로를 읽고 처리해야합니다; 아마도 fgets()
를 통해 :
printf("Active Device:%s", buffer);
파일이 pclose()
폐쇄해야 popen()
을 열 것을 기억하십시오 :
char buffer[LARGE_ENOUGH];
// Read one line from the input (or part of one, if the buffer is too small)
if (fgets(buffer, sizeof(buffer), file) == NULL) {
// handle error
}
// If a newline was read then it will be included
buffer[strcspn(buffer, "\n")] = '\0';
당신은 결과를 인쇄 할 수있는 방법으로,
if (pclose(file) != 0) {
// handle error
}
주, 파이썬 버전처럼 stderr와 표준 출력을 포착하려면 I/O redire를 통해 표준 출력을 수용하는 것이 가장 좋습니다. 같은 명령에 ction :
FILE *file = popen(
"{ ip link | grep 'state UP' | cut -d : -f 2 | cut -d ' ' -f2; } 2>&1",
"r"));
당신이 관심이 있습니까? C 또는 C++? 이들은 다른 언어입니다. –
C에서 명령 출력을 수동으로 읽어야합니다. 'popen() '을 찾으십시오. –
C++에서 나는 이런 종류의 일을하는 방법이있는 Boost :: Process를 볼 것을 추천합니다. –