2016-12-22 5 views
0

Meine Anwendung führt verschiedene Bash-Dateien aus, wenn ich meine Anwendung unter QTCreator ausführe, alles funktioniert gut, aber wenn ich meine Anwendung direkt ausführe, kann ich die QProcess-Ausgabe nicht lesen. Selbst wenn ich meine Anwendung über Terminal starte, funktioniert es gut. Wo ist das Problem?
ich bin QT 5.7/OSX Platform
hier verwendet, ist mein CodeQProcess Falsches Verhalten

 QProcess proc ; 
    proc.start(QCoreApplication::applicationDirPath() + "/check.sh"); 
    proc.waitForFinished(); 
    QString output = QString(proc.readAll()); 
    qDebug() << output ; 
+0

was meinen Sie läuft Anwendung direkt? wird check.sh ausgeführt, wenn Sie eine Anwendung ausführen? –

+0

Wo erwartet Sie die Ausgabe des Prozesses? Wenn Sie eine Anwendung ausführen, indem Sie auf Finder doppelklicken, werden Sie stderr oder stdout nirgendwo sehen, d. H. Sie werden 'qDebug()' nirgends ausgeben sehen. – E4z9

+0

Ich weiß, ich habe Qmessagebox für die Ausgabe verwenden, aber der hier zur Verfügung gestellte Code ist Teil meines Codes nur um zu zeigen, wie ich die Ausgabe lesen –

Antwort

0

Es gibt einige Möglichkeiten Sie

  • Können Sie bestätigen, untersuchen sollte, dass Skripte obwohl ausgeführt werden, wenn Sie es Standalone laufen?
  • QProcess war bei der Bereitstellung von Skripts je nach Plattform immer etwas skeptisch beim Erstellen von Prozessen. Hat Script Shebang drin? Passt es zu der Shell, von der Sie Ihr Programm ausführen? Möglicherweise müssen Sie einen Prozess basierend auf der Shell erstellen, indem Sie den Dateinamen des Skripts als Parameter angeben.
  • QProcess :: readAll() Gibt möglicherweise nichts zurück, wenn der Ausgabepuffer nicht vom Prozess geleert wurde. Die Ausgabe von EOL am Ende würde den Flush erzwingen.
+0

Ich weiß nicht warum, aber es funktioniert, wenn ich die bin und sbin Pfade durch qputenv hinzufügen manuell –

+1

Sie könnten auch 'QProcess :: setProcessEnvironment()' versuchen, wenn Sie Ihre eigene Programmumgebung nicht ändern möchten. –

+0

@Koorosh Ghorbani was ist in Skript geschrieben? #! Bash? oder #!/bin/bash? Former würde nicht funktionieren, außer es gibt diesen Ordner in der Umgebung. Symbollinks können ebenfalls ein Problem darstellen – Swift

Verwandte Themen