2016-12-21 44 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」クラスがあります。

が既に存在するファイルを呼び出す必要があるため、システムにはがあります。

のは、この例を見てみましょう:私たちはに必要QProcessを使用して

は注意

//[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(); 

リソースからのpythonファイルを実行します。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でubuntuをテストしましたが、QProcess :: FailedToStartと "No such file or directory"があります。また、今まで実行されたスクリプトの兆候は全くありません。 –

関連する問題