Wie mache ich eine transparente Durchreiche zur Konsole (bash, cmd, usw.. )?
Das Ganze sollte eine CGI-HTML-Seite werden mit einem Konsolenfenster und soll sich identisch verhalten, wie die Konsole im Hintergrund (auch ncurses soll 1 zu 1 rüberkommen).
Die einzige Einschränkung, die ich in kauf nehmen muss ist, dass ich für die Eingabezeile ein extra form-Feld bauen muss, um auch übermitteln zu können oder (ncurses buttons und tab-navigation )?
Gruss, Dominik
Transparente Durchreiche zur Konsole?
Ncurses wirst du im Browser nicht so ohne weiteres darstellen können. Du kannst dir zwar theoretisch eine Lösung mit DHTML, Javascript und vielen Anfragen an den Webserver basteln, allerdings ist das mit einer Menge Aufwand und Wissen verbunden. Es gibt dafür keine einfache Lösung.
Etwas anderes wäre eine simple Webshell, in der der User alle Befehle die sich "pipen" lassen (sprich: "ls", "cat", "echo", usw.) eintippen kann. Deren Output könntest du in eine Art Buffer schreiben und diesen an den Client schicken. Die Befehle führst du dann im Script mit os.popen() aus.
Etwas anderes wäre eine simple Webshell, in der der User alle Befehle die sich "pipen" lassen (sprich: "ls", "cat", "echo", usw.) eintippen kann. Deren Output könntest du in eine Art Buffer schreiben und diesen an den Client schicken. Die Befehle führst du dann im Script mit os.popen() aus.
| [url=http://www.sourceforge.net/projects/propolice/]propolice[/url] | [url=http://del.icio.us/vortec/]bookmarks[/url] | [url=http://www.BlowIRC.net/]irc[/url] | [url=irc://irc.BlowIRC.net/python]#python[/url] |
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
Das mit dem DHTML ist kein Problem, da ich davon mehr Ahnung habe als von GUI-Programmierung, soll das ganze Projekt (*) über HTML laufen.
Was mir nicht klar ist, ist der Python Teil.
Wie kommunitiere ich mit der Shell in beide Richtungen?
In welcher Form kann ich ncurses auslesen?
Und wie kann ich die Benutzeraktion zurückgeben?
Keine simple Webshell, ich will eine Representation der richtigen Shell, die im Hintergrund arbeitet.
os.popen(), ich hatte etwas in dieser Art vermutet
*GMC (Gentoo Menagement Console oder ähnlicher Stuss mit diesen Buchstaben )
Danke, Dominik
Was mir nicht klar ist, ist der Python Teil.
Wie kommunitiere ich mit der Shell in beide Richtungen?
In welcher Form kann ich ncurses auslesen?
Und wie kann ich die Benutzeraktion zurückgeben?
Keine simple Webshell, ich will eine Representation der richtigen Shell, die im Hintergrund arbeitet.
os.popen(), ich hatte etwas in dieser Art vermutet
Bedeutet das, dass ich die Shell per Python starten muss, mit spezial Optionen, um die stdin, stdout und stderr umleiten zu konnen?Deren Output könntest du in eine Art Buffer schreiben
*GMC (Gentoo Menagement Console oder ähnlicher Stuss mit diesen Buchstaben )
Danke, Dominik
Nunja. Du könntest dir einen Stream bauen, dessen Dessenfluss erst endet wenn du es willst. D.h., du hörst einfach nicht auf Daten an den Browser zu senden (welche natürlich nur dann gesendet werden wenn auch wirklich etwas passiert), wie bei Webchats. Das wäre die eine Richtung. Die andere Richtung könnte sich mit JavaScript lösen lassen. Ich hatte so etwas auf einem Plonesprint mal gesehen, dort hatte Jean-Paul Ladage ein Produkt vorgestellt, welches JavaScript benutzte, um Daten an den Server zu schicken (der Zweck war Nutzereingaben zu speichern) ohne einen Reload des Browsers zu provozieren, halt nur mit JavaScript. Wie das genau geht, weiß ich nicht - da fragst du ihn am besten mal selber oder schaust im Internet.Wie kommunitiere ich mit der Shell in beide Richtungen?
Das könnte der schwierigste Teil werden. Deswegen sprach ich im ersten Post von "Wissen" was du hierfür benötigst. Mein Wissen reicht dazu nicht aus, vielleicht fragst du mal in einem C-Forum.In welcher Form kann ich ncurses auslesen?
Siehe oben.Und wie kann ich die Benutzeraktion zurückgeben?
Damit meinte ich eigentlich, die Befehle die der User eingetippt hat und deren Output in eine Variable oder File zu speichern, damit er sich ganz "Bash-like" fühlt. Halt dass nicht nur der letzte Befehl angezeigt wird, sondern alle. Gilt aber nur für die simple Webshell.Bedeutet das, dass ich die Shell per Python starten muss, mit spezial Optionen, um die stdin, stdout und stderr umleiten zu konnen?
| [url=http://www.sourceforge.net/projects/propolice/]propolice[/url] | [url=http://del.icio.us/vortec/]bookmarks[/url] | [url=http://www.BlowIRC.net/]irc[/url] | [url=irc://irc.BlowIRC.net/python]#python[/url] |
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich sag dir, das ist unglaublich schwer und unter Windows wirst du das sowieso nicht schaffen.
Es ist schon schwer genug eine Shell mit einem Tk zu erstellen, von HTML ganz zu schweigen.
Es ist schon schwer genug eine Shell mit einem Tk zu erstellen, von HTML ganz zu schweigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
So krass? Es soll ein Linux admin tool werden, folglich ist mir Windows wurst, jedoch währe es cool über putty ein Linux fernadministrieren zu könnenIch sag dir, das ist unglaublich schwer und unter Windows wirst du das sowieso nicht schaffen.
Wo ist der Unterschied, abgesehen davon, dass ich von Tk keine Ahnung habe?Es ist schon schwer genug eine Shell mit einem Tk zu erstellen, von HTML ganz zu schweigen.
HTML hatte ich gewählt, da ich da Heimvorteil besitze (ich dachte zu erst an wxPython).
Eigentlich ist mir das Frontend egal, da ich die GUI (soweit möglich) von der Logik trennen möchte.
Da wirst du wohl Recht haben.Das könnte der schwierigste Teil werden. Deswegen sprach ich im ersten Post von "Wissen" was du hierfür benötigst. Mein Wissen reicht dazu nicht aus, vielleicht fragst du mal in einem C-Forum.
Ist die Ncurses-ausgabe in ASCII?
Gruss, Dominik
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Slalomsk8er,
hmm was du machen willst, geht doch über ssh, damit kannst du dich an einem entfernten Rechner ganz normal in der Console einloggen. Jedes Consoletool kannst du dann dort aufrufen, auch Tools die ncurses verwenden.
Ansonst gibts unter Linux auch z.B. Screen, mit dem sich sogar grafische Programme auf dem entfernten Rechner starten lassen.
Gruß
Dookie
hmm was du machen willst, geht doch über ssh, damit kannst du dich an einem entfernten Rechner ganz normal in der Console einloggen. Jedes Consoletool kannst du dann dort aufrufen, auch Tools die ncurses verwenden.
Ansonst gibts unter Linux auch z.B. Screen, mit dem sich sogar grafische Programme auf dem entfernten Rechner starten lassen.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und was hindert dich daran? Das mache ich auch so.Slalomsk8er hat geschrieben:Es soll ein Linux admin tool werden, folglich ist mir Windows wurst, jedoch währe es cool über putty ein Linux fernadministrieren zu können
Ich habe von einem Tk gesprochen, nicht von Tk.. wenn dann wohl eher PyGTK oder wx GTK hat wesentlich mehr Interaktionsmöglichkeiten als DHTML, läuft auch viel schneller als JavaScript.Slalomsk8er hat geschrieben:Wo ist der Unterschied, abgesehen davon, dass ich von Tk keine Ahnung habe?Es ist schon schwer genug eine Shell mit einem Tk zu erstellen, von HTML ganz zu schweigen.
HTML hatte ich gewählt, da ich da Heimvorteil besitze (ich dachte zu erst an wxPython).
Eigentlich ist mir das Frontend egal, da ich die GUI (soweit möglich) von der Logik trennen möchte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
Hauptsächlich, wird es eine Administrationstool, bei dem man die Docu, für das was man macht, gerade nebenan hat.
Also als erstes Zugriff auf die Shell und zwar beliebig oft (screen, bash und eventuell ssh, für nicht locale Dinge).
Als nächstes ein Docubrowser für info, man (über die Shell) und die eigene Projekt bezogene Docu (z.B. Gentoo Installation).
Nun kommt noch ein Tool um Config-Dateien besser bearbeiten zu können. Mit Dropdownlisten und so (solche Dinge, sind der Grund, weshalb ich das nicht direkt in der Bash realisieren kann), wo man die gängigen Werte für die Variablen ablesen und auch gleich auswählen kann.
Und zum Schluss, ein Log, das alles aufzeichnet. Möglicherweise könnte man daraus auch gleich automatisch simple Shellscripts erstellen lassen.
Falls es euch interessiert, hier ist die Entstehungsgeschichte.
Gruss, Dominik
Also als erstes Zugriff auf die Shell und zwar beliebig oft (screen, bash und eventuell ssh, für nicht locale Dinge).
Als nächstes ein Docubrowser für info, man (über die Shell) und die eigene Projekt bezogene Docu (z.B. Gentoo Installation).
Nun kommt noch ein Tool um Config-Dateien besser bearbeiten zu können. Mit Dropdownlisten und so (solche Dinge, sind der Grund, weshalb ich das nicht direkt in der Bash realisieren kann), wo man die gängigen Werte für die Variablen ablesen und auch gleich auswählen kann.
Und zum Schluss, ein Log, das alles aufzeichnet. Möglicherweise könnte man daraus auch gleich automatisch simple Shellscripts erstellen lassen.
Falls es euch interessiert, hier ist die Entstehungsgeschichte.
Gruss, Dominik
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Alles, bis auf die Shell ließe sich recht leicht realisieren. Nur von DHTML würde ich dir abraten, das macht alles noch viel komplizierter, da es so nett eingeschränkt ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
DHTML ist für mich einfacher als wxPython (GUI-Programmierung habe ich absolut nicht begriffen).Alles, bis auf die Shell ließe sich recht leicht realisieren. Nur von DHTML würde ich dir abraten, das macht alles noch viel komplizierter, da es so nett eingeschränkt ist.
Möglicherweise werde ich Xul verwenden http://www.mozilla.org/projects/xul/ http://www.xulplanet.com/.
Was mir Kopfzerbrechen bereited ist nicht das GUI, sondern die Kommunikation mit der Shell. Hat jemand Tips oder Links für mich?
Gruss, Dominik
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die Welt endet nicht bei wx.Slalomsk8er hat geschrieben:DHTML ist für mich einfacher als wxPython (GUI-Programmierung habe ich absolut nicht begriffen).
Müsstest mal schauen was die Bash so zu pipes sagt, aber ich vermute, dass du diese Idee zumindest in Python und JavaScript begraben kannst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
Ich bin am experimentieren, bis jetzt habe ich eine shell (-i, interactive) im pythonscript in der shell
Kann man bei Python Variablen per URL mit geben wie bei PHP (URL?foo=bar)?
Gruss, Dominik
Kann man bei Python Variablen per URL mit geben wie bei PHP (URL?foo=bar)?
Gruss, Dominik
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Gut, ich experimentiere mit der Z-Shell und Pipes, allerdings gelingt das nicht besonders gut.Slalomsk8er hat geschrieben:Ich bin am experimentieren, bis jetzt habe ich eine shell (-i, interactive) im pythonscript in der shell
Meinst du jetzt online oder als Programm? Ja, kann man, guck mal in sys.argv, importiere aber erst das sys Modul.Slalomsk8er hat geschrieben:Kann man bei Python Variablen per URL mit geben wie bei PHP (URL?foo=bar)?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
Z-Shell, nie gehört bis jetzt.
Online, mit sys.argv hatte ich bereits in der Shell das Vergnügen.
Ich glaube die Metode, die ich suche ist Daten mit GET zu übermitteln und zwar in dem man das file, das die Daten verarbeiten soll mit den Daten als Anhang in der URL aufruft (http://localhost:8000/cgi-bin/test.py?content=home oder so). Nur wie greiffe ich die Daten ab? Etwa auch mit sys.argv oder bin ich da auf dem Holzweg?
Gruss, Dominik
Online, mit sys.argv hatte ich bereits in der Shell das Vergnügen.
Ich glaube die Metode, die ich suche ist Daten mit GET zu übermitteln und zwar in dem man das file, das die Daten verarbeiten soll mit den Daten als Anhang in der URL aufruft (http://localhost:8000/cgi-bin/test.py?content=home oder so). Nur wie greiffe ich die Daten ab? Etwa auch mit sys.argv oder bin ich da auf dem Holzweg?
Gruss, Dominik
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Meinst du evtl. das: http://python.sandtner.org/viewtopic.php?p=12224#12224
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
Code: Alles auswählen
if environ.has_key('QUERY_STRING'):
"vorhandene URL-Parameter parsen"
for i in environ['QUERY_STRING'].split("&"):
i=i.split("=")
if len(i)==1:
CGIdaten[ i[0] ] = ""
else:
CGIdaten[ i[0] ] = i[1]
Nun bin ich Python CGI mässig bedient.
Also ran an die Shell
Gruss, Dominik
-
- User
- Beiträge: 25
- Registriert: Samstag 22. Januar 2005, 19:43
FieldStorage() hatte ich schon selber gefunden.
Keine angst, ich habe alles geklaut (die cooky Geschichte ist auch nett);)
Nun wüsste ich nur noch gerne, wie ich diesen Server zum laufen bringe (ich glaube nicht, dass serve_forever() hier auch geht):
Quelle: http://python.sandtner.org/viewtopic.php?p=10896#10896
Ups, probieren geht über studieren. Es funzt doch mit server.serve_forever()
Gruss, Dominik
Keine angst, ich habe alles geklaut (die cooky Geschichte ist auch nett);)
Nun wüsste ich nur noch gerne, wie ich diesen Server zum laufen bringe (ich glaube nicht, dass serve_forever() hier auch geht):
Code: Alles auswählen
import CGIHTTPServer, SocketServer, socket
SERVERNAME = ""
PORT = 80
serveradresse=(SERVERNAME, PORT)
class MyServer(SocketServer.ThreadingTCPServer):
allow_reuse_address = 1 # Seems to make sense in testing environment
def server_bind(self):
"""Override server_bind to store the server name."""
SocketServer.ThreadingTCPServer.server_bind(self)
host, port = self.socket.getsockname()[:2]
self.server_name = socket.getfqdn(host)
self.server_port = port
class MyHandler(CGIHTTPServer.CGIHTTPRequestHandler):
def is_cgi(self):
"""Tests whether self.path is a cgi-script"""
path = self.path
for x in self.cgi_directories:
i = len(x)
if path[:i] == x and (path[i+1:] and path[i] == '/'):
self.cgi_info = path[:i], path[i+1:]
return True
return False
server = MyServer(serveradresse, MyHandler)
Ups, probieren geht über studieren. Es funzt doch mit server.serve_forever()
Gruss, Dominik
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
The Z-Shell ist eine Unix Shell, die aber im Gegensatz zur Bash einen gelungenen Windows Port besitzt.Slalomsk8er hat geschrieben:Z-Shell, nie gehört bis jetzt.
Du kannst das hier versuchen: http://python.sandtner.org/viewtopic.php?p=12224#12224Slalomsk8er hat geschrieben:Online, mit sys.argv hatte ich bereits in der Shell das Vergnügen.
Ich glaube die Metode, die ich suche ist Daten mit GET zu übermitteln und zwar in dem man das file, das die Daten verarbeiten soll mit den Daten als Anhang in der URL aufruft (http://localhost:8000/cgi-bin/test.py?content=home oder so). Nur wie greiffe ich die Daten ab? Etwa auch mit sys.argv oder bin ich da auf dem Holzweg?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice