Stellen Sie sich eine Webanwendung vor, mit der ein angemeldeter Benutzer auf Knopfdruck einen Shell-Befehl auf dem Webserver ausführen kann. Dies ist relativ einfach in den meisten Sprachen über einige Standard-Bibliothek-Tools.
Aber wenn der Befehl lange ausgeführt wird, sollte die Benutzeroberfläche nicht hängen bleiben. Auch hier ist es relativ einfach, mit einer Art Hintergrundprozess zu arbeiten oder den auszuführenden Befehl in eine Nachrichtenwarteschlange zu stellen (und die Ausgabe und den Status möglicherweise für späteren Verbrauch zu speichern). Kehre einfach schnell zurück, wir werden das ausführen und zu dir zurückkommen.
Was ich tun möchte, ist die Ausgabe des Web-Shell-Befehls zu zeigen, wie es passiert . Also vertikal scrollender Text wie wenn er in einem Terminal läuft.
Ich habe eine vage Vorstellung davon, wie ich das angehen könnte, indem ich die Ausgabe vielleicht auf ein Websocket streame und einfach die Ausgabe auf den Bildschirm drucke.
Was ich fragen möchte ist:
Sind irgendwelche Plugins, Bibliotheken oder Anwendungen, die dies bereits tun. Etwas, das ich entweder benutzen oder die Quelle lesen kann. Idealerweise ein Open Source Python / Django oder Ruby / Rails Tool, aber auch andere Stacks wären interessant.
Also, ich habe versucht, meine eigene Frage mit Code zu beantworten, da ich nichts finden konnte, um die Rechnung zu erfüllen. Hoffentlich ist es nützlich, wenn jemand auf das gleiche Problem stößt.
Redbeard 0X0A wies mich in die allgemeine Richtung, ich war in der Lage, ein rubitisches Skript zu bekommen, was ich mit popen machen wollte. Durch die Erweiterung auf EventMachine (da es eine bequeme Möglichkeit bot, einen Websocket-Server zu schreiben) und die Verwendung der integrierten popen-Methode wurde mein Problem gelöst.
Weitere Details hier Ссылка und der Code bei < a href="http://github.com/garethr/bolt/"> Ссылка
Ich bin mir nicht sicher, ob es das ist, was Sie wollen, aber es gibt einige webbasierte ssh-Clients da draußen. Wenn Sie sich für Sicherheit interessieren und wirklich nur dynamisches Feedback wünschen, können Sie in den Kometen schauen oder einfach nur einen Frame mit einer eigenen HTTP-Sitzung haben, die nicht endet, bevor sie fertig gedruckt ist.
Ich habe noch nie von Bibliotheken gehört, die das tun, aber Sie müssen den Systembefehl einrichten und zum System rufen. Sie müssen dann die Standardeingänge Sysout und Syserr "pumpen" und diese Daten an Ihren Web-Client zurückleiten.
Als Beispiel für diese Art von Problem, schauen Sie sich Code-Snippits an, wie Leute ruby / python / etc verwenden, um ein Video zu transcodieren, zB Ссылка - mein Beispiel wurde aus diesem Blogpost übernommen.
%Vor% Ich weiß nicht, ob dieses Beispiel Daten sowohl von sysout als auch von syserr zieht, aber Sie werden definitiv Daten von diesen beiden Schnittstellen abrufen müssen. Wenn der Puffer voll ist, kann der ausführende Befehl hängen oder ausfallen ( Ich habe das mit Python erlebt). Diese Methode sieht auch anders aus, wenn Sie line
nur an den Web-Client zurückgeben - in einem Terminal bleibt die Fortschrittsanzeige von ffmpeg / mencoder in der unteren Zeile stehen, aber diese Methode gibt Ihnen eine lange Liste von Fortschrittsanzeige-Updates. Pipe line
out zu deinem Terminal und du wirst sehen, was ich meine.
Sicherlich nicht der beste Weg, Shell-Befehle auszuführen, aber wahrscheinlich der einfachste:
%Vor%Sieh dir Galaxy an (online Demo ) oder Yabi .
Abgesehen von der Anforderung, die Ausgabe während des Joblaufs anzeigen zu können, sind beide ausgezeichnete Lösungen dafür! Sie sind auch beide in Python geschrieben (und Yabi sogar auf Django).
Sie wurden beide im Hinblick auf Bioinformatik entwickelt, sind aber beide allgemeine Job-Runner / Workflow-Tools.
Sie können Parameter in einer Webschnittstelle angeben, Jobs in der Warteschlange in einer separaten Spalte anzeigen und nach Abschluss der Jobs Details und Ergebnisse überprüfen oder den Job mit möglicherweise geänderten Parametern erneut ausführen.
Galaxy ist einfacher zu installieren. Die Galaxy-Installation läuft auf das Herunterladen und Ausführen von "sh run.sh" hinaus, und das Hinzufügen eines eigenen Tools führt zum Erstellen einer XML-Datei in der folgenden Zeile:
%Vor%... und platziere es im / tools-Ordner und füge eine Zeile in der tool_conf.xml hinzu, um der Galaxie dein neues Werkzeug zu zeigen (Dort kannst du auch die Bioinformatik-Tools loswerden, damit sie nicht durcheinander kommen dein Werkzeugmenü).
Yabi ist komplizierter zu installieren (siehe die Readme-Datei), aber der Prozess kann reibungslos verlaufen, wenn Sie auf dem richtigen System sind. Auf der anderen Seite erlaubt es Ihnen, die Tool-Konfiguration sogar in der Web-Oberfläche vorzunehmen, anstatt als XML-Datei wie in Galaxy.
Galaxy ist aber immernoch derjenige mit der größten Community, was sich in der Anzahl der Features / bereits integrierten Tools widerspiegelt (Siehe toolshed für geteilte Werkzeuge / Wrapper).
Tags und Links python django ruby ruby-on-rails shell