홈>
작업중인 응용 프로그램에서 명령을 실행해야합니다. 명령은 콘솔 명령 또는 'GUI 응용 프로그램'(예 : 메모장) 일 수 있습니다.
두 경우 모두에 리턴 코드를 가져와야하며 콘솔 명령의 경우 stdin 및 stderr의 출력도 잡아야합니다.
이 기능을 구현하기 위해 스택 오버플로 질문 'POSIX를 사용하여 C ++에서 명령을 실행하고 명령을 출력하는 방법은 무엇입니까?'.
내 코드 :
int ExecuteCmdEx(const char* cmd, std::string &result)
{
char buffer[128];
int retCode = -1; // -1 if error ocurs.
std::string command(cmd);
command.append(" 2>&1"); // also redirect stderr to stdout
result = "";
FILE* pipe = _popen(command.c_str(), "r");
if (pipe != NULL) {
try {
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
}
catch (...) {
retCode = _pclose(pipe);
throw;
}
retCode = _pclose(pipe);
}
return retCode;
}
콘솔 응용 프로그램과 완벽하게 작동하지만 'GUI 응용 프로그램'의 경우 예상대로 작동하지 않습니다 ...
'GUI 응용 프로그램'을 사용하면
while (!feof(pipe))
에서 코드가 중지됩니다.
파이프에서 무언가를 얻을 것으로 기대합니다.
메모장과 같은 'GUI 응용 프로그램'은 누군가와 상호 작용할 때까지 완료되지 않습니다 (사용자가 앱을 닫거나 프로세스를 종료하는 등), 그러나 Windows 콘솔에서 콘솔 응용 프로그램을 시작하면 프롬프트가 즉시 나타납니다. 'GUI 응용 프로그램'에서 동일한 동작을 얻고 싶습니다 ...
가능한 해결책 중 하나는isGui
를 추가하는 것입니다.
코드가 파이프에서 코드를 읽어야하는시기를 나타내는 변수이지만 'GUI 응용 프로그램'인지 여부를 표시하고 싶지 않으므로이 옵션을 거부했습니다.- 답변 # 1
관련 자료
- batch file - 선택 명령을 실행하지만 아무것도하지 않는 방법
- php - shell_exec 명령을 실행하는 방법
- windows - adb 쉘에서 중첩 된 문자열로 sqlite3 쿼리의 하나의 라이너 명령을 실행하는 방법은 무엇입니까?
- Makefile FILES 명령이 실행되지 않습니다
- PHP shell_exec가 Hadoop 명령을 실행하지 못했습니다
- java - Windows에서 단일 명령으로 jar 파일을 실행하는 방법은 무엇입니까?
- 대화식 입력이있는 bash 명령을 올바르게 실행
- macos - 명령 줄에서"낮은 해상도로 열기"
- java - cmd에서 관리자로 복사 명령 실행
- C #에서 SQL serverless 명령
- macos - hdfs 명령을 실행하는 중 오류가 발생했습니다
- python - SAS가 명령이 완전히 실행될 때까지 기다리도록하려면 어떻게해야합니까?
- Vim 스크립트 실행 명령은 매 두 번째 대체를 건너 뜁니다
- asp.net core - netcore 배포 스크립트의 하위 디렉토리에서 npm 명령 실행
- mqtt 명령을 실행하는 쉘 스크립트
- java - 창이 닫히면 명령 실행이 실패 함
- linux - Apache가 루트에서 명령을 실행할 수 있습니까?
- ansible - 쉘 스크립트를 실행하여 환경을 설정 한 후 명령을 실행하는 방법은 무엇입니까?
- bash - Ping 스크립트에서 Nmap을 실행하는 방법
- javascript - 전자 앱을 통해 명령을 실행하는 방법
관련 질문
- c++ 프로세서 ID 가져 오기
- c++ : 내 앱이 앞으로 나오고 집중하도록하려면 어떻게해야하나요?
- c++ : 설치 스크립트 또는 배치를 통해 파일 인코딩을 확인하는 방법이 있습니까?
- c++ : cmd.exe는 입력이 창의 너비와 일치 할 때 새 줄을 버립니다.
- c++ : Windows 프로그램에서 WM_QUIT, WM_CLOSE 및 WM_DESTROY의 차이점은 무엇입니까?
- c++ : Windows에서 Qt (qmake)를 사용하는 타사 라이브러리 (RecFusion)에 대한 정의되지 않은 참조
- c++ : MinGW 및 GLUT 정의되지 않은 '_imp ____ glutInitWithExit @ 12'참조
- c++ : ID2D1RenderTarget :: BeginDraw로 인해 WINAPI에서 컨트롤이 깜박임
- c++ : Windows 10 알림 기록 추출
- c++ /c++ 11을 사용하여 현재 시간 (밀리 초)을 인쇄하는 방법
글쎄,
isGui
를표시할 필요는 없습니다. 명령을 실행하기 전에 실행 파일 (Windows/콘솔)의 하위 시스템을 확인하고 리디렉션 된 파이프에서 대기하는 창을 건너 뛰는 경우 자신을감지합니다.예를 들어,
SHGetFileInfo
사용SHGFI_EXETYPE
와 함께 플래그 :나중에 코드에서 ...