[Solved]QT widget doesnt work due to open a file in a QProcess
-
Hi all,
i have here a nice problem.
I wrote a small gui for starting a perlscript. This script prints out the stuff which is defined in my gui.After that i write a file with the variables and start thru a QProcess a perlscript to process the data.The problem is, that the perl script isnt working. If i comment out the open file, in the perlscript everything is ok.
Thanks for some hints..
Greetz
Below see my files.
@mainwindow.ccp
void MainWindow::on_commandLinkButton_clicked()
{
//input variables
QString Variant = ui->inputVariant->text();
QString Load = ui->inputLoad->text();//write file
QFile inputfile("/fs1/PerlQt/QtCreator/test/variables.inp");
inputfile.open(QFile::WriteOnly|QFile::Truncate|QFile::Text);
QTextStream str(&inputfile);
QStringList list;
list << Variant << Load ;
foreach(const QString &s, list)
{
str << s << endl;
}//start perlscript QProcess perl; perl.start("./fs1/PerlQt/QtCreator/test/test.pl"); perl.waitForFinished(-1); QString p_stdout = perl.readAllStandardOutput(); QString p_stderr = perl.readAllStandardError(); //output in textwindow ui->output->setText(p_stderr); ui->output->setText(p_stdout);
}
test.pl
#!/usr/bin/perlsub print_var()
{
print "Name \n\n"; #print name
print "=> $files[0] \n"; #print the first entry in array files
}
open incl, 'variables.inp' or die "Datei nicht gefunden $!"; # open the file variables.inp
@files = <incl>; #read in file and fill a array @files
close(incl); #close file
print "agghagh \n\n"; #print stupid stuff
print_var(); #print the stuff which is in sub print_var@ -
Hmm, Your code is almost unreadable! Place it in the code box please!!
-
At first sight, you try to open a file with perl that is still opened by QFile (the data might be still in a buffer and not yet on the disk).
What happens if you close inputFile before calling your perl script ?
-
Just in case, did you saw that your inputFile is "/fs1/PerlQt/QtCreator/test/variables.inp" and your script is "./fs1/PerlQt/QtCreator/test/test.pl" <= There's a dot in front here.
-
By default QProcess is started with a working directory of the calling process. Since you have a relative path in your perl script it is looking for input file in the directory of your executable, not where the script file is. Use QProcess::setWorkingDirectory() to change that.
-
@SGaist: ./ is for start the script here. This is normal linux stuff, but thanks for the hint.
@krzysztof: i catch stderr, so ishould get an error,file not found and the perlscript should print the first aggah and then i shold get errormessage, because the file is processed after the print command. Setting the file to an absolut path didnt work as well.but anyway thanks to u guys.
Hope we will find the error, any others thoughts.... -
Ok, this might be stupid because I know little about linux and how QProcess behaves there, but maybe this would work?
@
perl.start("perl ./fs1/PerlQt/QtCreator/test/test.pl");
@ -
That's why i suggested you to double check the use of "./" since your inputFile path is an absolute path but your perl script path is relative. That might be the culprit.
-
Did you check the working directory of your perl script ?
Besides that, make it print the content of the current directory, that might give your some clues -
For all whoo are interessted in.
The problem was the following code in perl, which wasnt correctly compiled due QT.@open incl, 'variables.inp' or die "Datei nicht gefunden $!"; # open the file variables.inp@
This line open a file and if the file not exists the applikation die and print file not found.
I found out, that without the booleen or die everything is ok and worked.Thanks for all your post and the help.
Greetz