[gelöst] sonderbares verhalten meines programmes

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

[gelöst] sonderbares verhalten meines programmes

Beitrag von slash-ex »

also erstmal der code der impl.:

Code: Alles auswählen

//VARIABLEN
QString flist;
char choice;
QString target_path;
QString options;
QString s_filepath;
QString s_file;
QProcess prc;
QStringList strlist;

Code: Alles auswählen

void Form1::extract()
{
    short pos = s_file.find(".tar" , 0);
    s_filepath = s_file.left(pos);
    
    chdir(s_filepath); //cd ..
    system("tar xf " + s_file); //extraction  
    cout<<s_filepath<<endl;
    cout<<"GUT: STAGE 1"<<endl;
    pushButton_conf->setEnabled(1);
}

void Form1::go_conf(QString path, QString  name, QString arg) //
{  
    prc.addArgument(name);

    connect(&prc, SIGNAL(readyReadStdout()), this, SLOT(ready() ) );
    connect(&prc, SIGNAL(processExited()), this, SLOT(finish() ) );   
    choice = 'm';
    
    chdir(path); prc.start();
}

void Form1::conf()
{
    short pos = s_file.find(".tar" , 0);
    s_filepath = s_file.left(pos);
    
    options = lineEdit_parameters->displayText();
    target_path = lineEdit_path->displayText();
   
    go_conf(s_filepath, "./configure", 0);
    cout<<"bearbeite ./configure script"<<endl;
}

void Form1::go_make(QString path, QString  name)
{  
    prc.addArgument(name);
    
    connect(&prc, SIGNAL(readyReadStdout()), this, SLOT(ready() ) );
    connect(&prc, SIGNAL(processExited()), this, SLOT(finish() ) );   
    choice = 'i';
    
    chdir(path); prc.start();
}

void Form1::make()
{
    short pos = s_file.find(".tar" , 0);
    s_filepath = s_file.left(pos);
    
    go_make(s_filepath, "make");
    cout<<"baue Programm"<<endl;
}

void Form1::go_install(QString path, QString  name)
{  
    prc.addArgument(name);
    
    connect(&prc, SIGNAL(readyReadStdout()), this, SLOT(ready() ) );
    connect(&prc, SIGNAL(processExited()), this, SLOT(finish() ) );  
    
    chdir(path); prc.start();
}

void Form1::install()
{
    short pos = s_file.find(".tar" , 0);
    s_filepath = s_file.left(pos);
    
    go_install(s_filepath, "make install");
    cout<<"installiere Programm"<<endl;
    
    //chdir(s_filepath); //cd ..
    //flist_writer("system_before_install.log", filelister() );
}

void Form1::ready() 
{
  while (prc.canReadLineStdout() ) {
     textEdit_log->append(prc.readLineStdout() );
  }  
}

void Form1::finish() 
{
    textEdit_log->append("PROCESS FINISHED");
    
    if(choice == 'm')
	pushButton_make->setEnabled(1);
    if(choice == 'i')
	pushButton_install->setEnabled(1);
}

void Form1::FileDialog()
{
    s_file = QFileDialog::getOpenFileName(
                    "/home",
                    "Archiv (*.tar *.tar.gz *.tar.bz2)");
    
    lineEdit_path_packet->setText(s_file);
}

die funktionen dienen dem entpacken eines tar.bz-archives, dem :/configure des configure scriptes anschließend dem ausführen von "make" und schließlich "make install". das problem ist, dass
a) das archiv (nur wenn es noch nicht entpackt wurde) an eine andere stelle (wo die ausführende datei liegt) entpackt wird, wenn ich das programm mit der konsole öffne.
b) wenn ich normal per mausklick öffne scheint es als ob die bearbeitenden dateien außerhalb des entpackten verzeichnisses kopiert werden und dort bearbeitet werden. allerdings verändern sich auch innerhalb des verzeichnisses dateien.
c) obwohl ich in den oberen funktionen statt ../configure, "make" ausführe steht im log-widget des programmes immer das selbe (nämlich der configure log)

also, der kram macht mich wirklich ratlos.
das prog dient mir zur übung, also entschuldigt die etwas unsaubere form :oops:

ich hoffe man kann mir hier z.T. helfen :o

MFG :!:
Zuletzt geändert von slash-ex am 11. Juli 2005 21:51, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: sonderbares verhalten meines programmes

Beitrag von macman »

Also das Konsolenaufruf und Mausklick vollkommen unterschiedliche Umgebungen sind, wird dir wohl klar sein. Wenn man dann mit relativen Pfaden arbeitet, muß man mit unliebsamen Seiteneffekten rechnen. Dann übergibst Du die Parameter mal mit Slash, mal ohne. ("/configure", "make").
Mal baust Du den Kommandostring aus Pfad und Befehl, mal nur den Befehl.
slash-ex hat geschrieben:das prog dient mir zur übung, also entschuldigt die etwas unsaubere form
Und wir sollen jetzt deinen Fehler finden? Räum da etwas auf, dann wirst Du ihn wahrscheinlich schon von alleine finden.

Nur um mal ein Beispiel zu nennen. Um unter Windows an das Verzeichnis zu kommen, in dem das gestartete Programm liegt, mußt Du den übergebenen Parameter aus main() auswerten. Alle anderen Angaben variieren je nach Aufruf.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

Und wir sollen jetzt deinen Fehler finden?
das wäre nett :!:
Nur um mal ein Beispiel zu nennen. Um unter Windows an das Verzeichnis zu kommen, in dem das gestartete Programm liegt, mußt Du den übergebenen Parameter aus main() auswerten. Alle anderen Angaben variieren je nach Aufruf.
das nutze ich, um dem prog bereits zum start ainen pfad zuzuweisen! aber das muss ich nun wirklich nicht posten!
denn eigentlich bastle ich ja eine gui :)

Dann übergibst Du die Parameter mal mit Slash, mal ohne. ("/configure", "make").
aber doch nur weil ich nicht weiß wie :oops: , ich hab doch niemanden der es mir erklären könnte!

ich weise gleich mal darauf hin, dass dies wahrscheinlich der fehlergrund ist. und die hilfe hier anzusetzen dürfte mir am weitesten helfen :!:
ich habe zu keinem zeitpunkt verlangt das man für mich die ******-arbeit macht :idea:

MFG
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

so ich hab den code oben aktualisiert UND geordnet.
die eigentliche frage:
egal ob ich die conf make oder install fkt ausführe, es wird immer ein configure durchgeführt! jedensfalls ist das aus dem log ersichlich.
ich verstehe nicht warum!!!
soll ich statt prc. system verwenden, ich hoffe nicht!

MFG
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

slash-ex hat geschrieben:egal ob ich die conf make oder install fkt ausführe, es wird immer ein configure durchgeführt! jedensfalls ist das aus dem log ersichlich.
ich verstehe nicht warum!!!
Ich sehe es jetzt erst :) Du hast den Prozess global angelegt und rufst immer denselben auf. Klingelt's?
Erst übergibst du configure und rufst dann den Prozess ("./configure") auf, soweit noch ok. Dann übergibst du make, was jetzt das 2. Argument für den Prozess ist und deshalb als Parameter für das 1. Argument genutzt wird ("./configure make"). usw. Besser wäre es also in jeder Methode einen eigenen Prozess zu nutzen. Und dann bau noch eine Sicherung ein, nicht das du make aufrufen kannst, während das configure noch läuft.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

ohh, das könnts sein.
DANKE :D
Antworten