2016-12-21 5 views
0

Qt가 새로 도입되었습니다.리소스 파일을 실행할 때 QProcess의 출력을 리디렉션

QProcess를 사용하여 외부 셸 스크립트를 실행하고 출력을 GUI에서 textBrowser로 리디렉션하려고합니다. 코드 : mainwindow.h에서

:

private: 
    QProcess *myProcess; 

및 mainwindow.cpp :

void MainWindow::onButtonPressed(){ 
    myProcess = new QProcess(this); 
    myProcess->connect(myProcess, SIGNAL(readyRead()), this, SLOT(textAppend())); 
    myProcess->start("./someScript.sh", arguments); 
} 

void MainWindow::textAppend(){ 
    ui->textBrowser->append(myProcess->readAll()); 
} 

이 외부 스크립트를 실행하는 데 완벽하게 작동합니다. 내 질문은 어떻게 리소스 파일로 포함 된 스크립트와 동일한 프로세스를 적용하는 것입니다. "./someScript.sh"을 리소스 버전 ":/someScript.sh"으로 바꾸려고 시도했지만 작동하지 않는 것 같습니다. 리소스 스크립트가 완벽하게 실행되지만 콘솔 출력이 사라집니다.

+0

는 "작동하지 않는 것"은 무엇을 의미합니까? 빈 출력을 얻습니까? QFile :: exists (":/someScript.sh")' – paceholder

+0

스크립트가 실행된다. (나는 다른 소스에서 볼 수있다.) 빈 출력을 얻는다. – Sphics

답변

3

이 이유 때문에 "QTemporaryFile"클래스가 있습니다.

이 이미 시스템에있는 인 파일을 호출해야하기 때문에 - 확인! 우리가

//[1] Get Python File From Resource 
QFile RsFile(":/send.py"); 
//[2] Create a Temporary File 
QTemporaryFile *NewTempFile = QTemporaryFile::createNativeFile(RsFile); 
//[3] Get The Path of Temporary File 
QStringList arg; 
arg << NewTempFile->fileName(); 
//[4] Call Process 
QProcess *myProcess = new QProcess(this); 
myProcess->start("python", arg); 
//[5] When You Finish, remove the temporary file 
NewTempFile->remove(); 

실행에 자원에서 파이썬 파일이 필요 를 사용하여 QProcess

: Windows에서 임시 파일이 에 저장

의이 예제를 보자 % TEMP % 디렉토리

,

더 많은 정보를 위해 당신이 방문 할 수 Qt Documentation - QTemporaryFile Class

행운 ♥

+0

높은 품질의 응답 및 답변자의 첫 번째 게시물. –

+0

고마워요. sir :) ♥ –

1

myProcess->start(":/someScript.sh", arguments);을 실행할 때 시스템에 :/someScript.sh을 실행하도록 요청했기 때문에 작동하지 않습니다.

빠른 해결책은 임시 폴더에 스크립트를 복사하여 거기에서 실행하는 것입니다.

QFile::copy(":/someScript.sh", pathToTmpFile); 
myProcess->start(pathToTmpFile, arguments); 

고유 한 임시 파일 이름을 얻으려면 QTemporaryFile을 사용하는 것이 좋습니다.

+0

내 프로그램에서 결과를 볼 수 있으므로 스크립트가 실행됩니다. 콘솔 출력은 외부에서 실행할 때 얻지 못합니다. – Sphics

+0

'QProcess : error()'와'QProcess :: errorString()'을 확인하십시오. Qt 5.6을 사용하여 우분투에서 테스트 한 결과 QProcess :: FailedToStart와 "No such file or directory"가 있습니다. 또한 필자는 스크립트가 실행 된 흔적이 전혀 없다. –