반응형
Qt에서 QProcess를 이용하여 프로그램이나, 명령어를 실행할 수 있으며 Arguments 값도 넣어 실행가능하고 터미널에서 명령어를 실행하여 나오는 결과 값도 받아 낼 수 있어요.
- 사용 방법
#include <QProcess>
int QProcess::execute(const QString &program, const QStringList &arguments)
void QProcess::start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite)
○ 명령어, 프로그램 실행이 종료될 때까지 대기하기
bool QProcess::waitForFinished(int msecs = 30000)
- 설명
1. 사용자가 설정한 msecs를 기준으로 Process 작업이 완료 될 때까지 대기
2. msecs : 대기 시간 (-1 : 무한 / 30초 : 기본)
- 리턴 값
1. true : 설정한 msecs내에 Process가 종료된 경우
2. false : 설정한 msecs를 초과 또는 waitForFinished() 이전에 Process가 종료되었을 경우
- 사용 예제
1. Ping 명령어를 실행 후 2초까지 대기.
2. Ping 명령어는 Process 종료 전까지 실행됨으로 대기 시간 2초를 경과하여 false 발생.
3. Ping 명령어를 실행 중인 Process는 아직 실행 중으로 kill()로 강제 종료.
#include <QProcess>
#include <QDebug>
QProcess process;
process.start("ping 127.0.0.1");
if (process.waitForFinished(2000) == false)
{
qDebug() << "waitForFinished - false";
process.kill();
}
process.close();
○ 명령어 실행 후 나올 때까지 대기 및 결과 읽기
bool QProcess::waitForStarted(int msecs = 30000) // 시작 때까지 대기
bool QProcess::waitForReadyRead(int msecs = 30000) // 읽을 때까지 대기
QByteArray QIODevice::readAll()
- 예제
QString output;
QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
process.start("who");
if (process.waitForReadyRead() == true)
{
output = process.readAll();
}
qDebug() << output;
process.waitForFinished();
process.close();
- 실행 결과
14:22:42: Debugging starts
"ubuntu :0 2021-05-09 21:24 (:0)\n"
○ 프로세스 강제 종료하기
void QProcess::kill()
○ 여러개의 명령어를 실행하기
#include <QProcess>
QProcess process;
process.start("sh");
process.write("ls -al . | grep testfile > result.log");
process.closeWriteChannel();
process.waitForFinished();
process.readAll();
process.close();
- 실행 결과
ubuntu@ubuntu-VirtualBox:~/untitled/bin$ ls -al testfile
-rw-rw-r-- 1 ubuntu ubuntu 20 4월 28 18:14 testfile
ubuntu@ubuntu-VirtualBox:~/untitled/bin$ cat result.log
-rw-rw-r-- 1 ubuntu ubuntu 20 4월 28 18:14 testfile
반응형
'프로그래밍 > 기타' 카테고리의 다른 글
[Linux, C++] 파일 존재, 읽기, 쓰기, 실행 권한 여부 확인하는 방법 (access) (0) | 2021.05.15 |
---|---|
[Linux, C++] 파일 소유자, 파일 크기, 접근/수정 시간 등 파일 정보 보는 방법 (0) | 2021.05.15 |
[Linux, Ubuntu] SCP를 이용하여 원격지로 네트워크로 파일 전송, 다운로드 하기 (0) | 2021.05.10 |
[Linux, Ubuntu] 디스크의 정보 보는 방법 (fdisk, 용량, 타입) (0) | 2021.05.09 |
[Linux, Ubuntu] USB 메모릭 스틱/장치 ID, 마운트 위치 알아내기 (0) | 2021.05.09 |