wie man eine terminal-eingebettet in eine GUI PyQt

Gibt es eine bestehende Umgebung und das framework nutzbar über Bash-terminal rund um die ich möchte eine GUI. Was ich im Sinn habe, ist der folgende Ablauf:

  • In einer Bash-Sitzung, die framework-Umgebung eingerichtet ist. Diese Ergebnisse in alles, was von Umgebungsvariablen zu Beglaubigungen in die Sitzung.
  • Ein Python-GUI-Skript ausgeführt, um die wrap-around-die vorhandene session und machen es leichter zu führen Sie die nachfolgenden Schritte.
  • Der GUI angezeigt wird, auf der einen Seite wird die Bash-Sitzung in einem embedded terminal und auf der anderen Seite eine Gruppe von Schaltflächen, die entsprechend verschiedene Befehle, die ausgeführt werden können, in das bestehende framework-Umgebung.
  • Tasten gedrückt werden können, in der GUI was ein bestimmtes Bash-Befehle ausführen. Die Ergebnisse der Läufe werden angezeigt und in der embedded-terminal.

Was ist ein guter Weg, um Ansatz die Schaffung eines solchen GUI? Mir ist klar, dass die Idee von der Interaktion mit den bestehenden Umgebung könnte schwierig sein. Wenn es besonders knifflig wird es, ich bin offen für die Neuerstellung der Umgebung in einer Sitzung der GUI. In jedem Fall ist, wie kann der GUI-Interaktion mit der embedded-terminal. Wie können die Befehle ausgeführt werden und wird in der embedded-terminal, wenn die buttons der GUI gedrückt werden?

Einen einfachen start der GUI (mit einem embedded terminal) ist wie folgt:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class embeddedTerminal(QWidget):

    def __init__(self):

        QWidget.__init__(self)
        self.resize(800, 600)
        self.process  = QProcess(self)
        self.terminal = QWidget(self)
        layout = QVBoxLayout(self)
        layout.addWidget(self.terminal)
        self.process.start(
            'xterm',
            ['-into', str(self.terminal.winId())]
        )

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = embeddedTerminal()
    main.show()
    sys.exit(app.exec_())

Wie konnte ich laufen, sagen, top auf dieser embedded-terminal nach dem drücken einer Taste auf der GUI?

  • Könnten Sie erklären, ein wenig mehr, warum Sie möchten, nähern Sie Ihr problem auf diese Weise als eine herkömmliche GUI? Ist es sparen Sie einige Arbeit zu schreiben, die GUI, oder speichern Sie Sie arbeiten, ändern Sie die vorhandenen Befehle? Oder beides, oder etwas anderes? Sind die Befehle, die interaktive, oder haben Sie bis zum Abschluss ausgeführt, ohne weitere Benutzereingaben (nach der Befehlszeile eingegeben wird, und drücken Sie die EINGABETASTE)? Sie sagen "bash-Befehl" -- ich vermute, dass die situation in der Tatsache, dass bestimmte Prozesse müssen laufen zu bekommen, und bash ist nicht wirklich eng beteiligt, außer als eine Möglichkeit, Sie zu starten?
  • Hey, Dank für die Prüfung dieser. Im Grunde, es gibt eine riesige Infrastruktur, die Benutzer sollen die Interaktion mit über ein terminal. Typische Verwendung mit sich bringen kann, die Anrufung mehrere Befehle mit entsprechenden Skripten in verschiedenen Sprachen, die meisten mit komplexen Kommandozeilen-Argumente. Ich weiß von Möglichkeiten zur Automatisierung der Erstellung von verschiedenen Befehle, die ausgeführt werden, werden in dem terminal, und ich möchte, um zu sehen, wenn ich kann, Dinge zu vereinfachen, für Benutzer, die ein wenig effektiv durch hinzufügen einer GUI auf dem terminal mit verfügbaren Schaltflächen für die automatische Generierung und Ausführung von Kommandos.
  • Effektiv, ich möchte ein interaktives terminal und die Schraube auf (oder haben es fest verschraubt) eine einfache GUI PyQt, die Interaktion mit dem terminal zu (Rohr-in-Befehle und führen Sie Sie, und erhalten die Ausgabe der Befehle).
  • So sieht es eigentlich braucht, um ein terminal + bash, und nicht sagen, eine einfache Online-editor, in dem Sie selber implementieren -- in dem Fall kann man nur die Befehle ausführen, selbst mit QProcess-oder Teilprozess. Sind die Rohrleitungen und der job-Steuerung verwendet viel? Wenn nur ein paar Fälle, wrappen solche Fälle mit ein paar neuen Befehle so, dass es null Fälle übrig?
  • Auf einer anderen Linie als meine Befragung in den Kommentaren oben, und nur um zu zeigen das Spektrum der Möglichkeiten / inspiration (ich sage nicht, dass Sie verwenden oder tun etwas ähnliches): github.com/mseaborn/coconut-shell (dies ist eine Kombination aus shell-und terminal, in python geschrieben-so könnte erweitert werden, um die Interaktion mit, wie Sie möchten)
InformationsquelleAutor d3pd | 2015-03-18
Schreibe einen Kommentar