ubuntuusers.de

Gambas2 Shellauswurf in Textarea

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Ghaldez

Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

Hallo Leute

Ich bin nun schon seite einiger Zeit auf der Suche

das ich die den auswurf der Shell in einer Textarea darstellen kann.

Aber wie ?!...

Und kann ich Shell "auslesen"

Also so nach dem motto wenn er das und das er die und die Zeile rauskopiert?

, da das programm statusse anzeigt und ich diese gerne in der GUI hätte .

MfG ~Ghaldez

FatFrog

Avatar von FatFrog

Anmeldungsdatum:
19. März 2007

Beiträge: 383

SHELL "programm > /tmp/ausgabe" WAIT
MyTextarea.text = File.Load("/tmp/ausgabe")


So in der Art? Also Ausgabe des Programms in Datei umleiten und dann einfach die Datei danach auslesen. Wenn Du es zur Laufzeit brauchst, kannst Du die Datei ja auch einfach mehrmals prüfen lassen (dann muss aber das WAIT weg).
Was Besseres fällt mir jetzt nicht ein, aber ich hab mich auch nie wirklich mit Gambas beschäftigt.

Gruß FatFire

Ghaldez

(Themenstarter)
Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

Hmm über den Schnipsel bin ich auch schon geffallen.

...es klapt aber nicht :/

FatFrog

Avatar von FatFrog

Anmeldungsdatum:
19. März 2007

Beiträge: 383

Also bei mir klappt es.

PUBLIC SUB Button1_Click()
  SHELL "ls / > /tmp/ausgabe" WAIT
  TextArea1.Text = File.Load("/tmp/ausgabe")
END


hat als Ergebnis:

Ungültiges Makro

Dieses Makro ist nicht verfügbar

Wie sieht es denn bei Dir im Code aus und was versuchst Du denn auszuführen?

Gruß FatFire

Ghaldez

(Themenstarter)
Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

Wir diskutieren jetzt schon stark im Stammtisch wie es den gehen könne ☹

PUBLIC SUB Button2_Click()

SHELL "wget -x ftp://Verzeichnis/client.tar.gz; cd ~/Verzeichnis; tar -xvvzf client.tar.gz; make; > /tmp/mandel" WAIT
 
Textarea1.text = File.Load(" /tmp/mandel")

END

der haut mir nen

Permission denied raus 😕

\––\––\––\––\––\––\––\––\––\––\––\––\––\––\––\––\––\–––
Edit: ich glaub es hackt ..

PUBLIC SUB Button2_Click()

SHELL "wget -x ftp://Verzeichnis/client.tar.gz; cd ~/Verzeichnis; tar -xvvzf client.tar.gz; make > /tmp/mandel" WAIT
 
Content = File.Load("/tmp/mandel")

Textarea1.text = Content

END

So haut er mir raus "make: »client« ist bereits aktualisiert."

zwar nicht alles , aber ein Erfolg

FatFrog

Avatar von FatFrog

Anmeldungsdatum:
19. März 2007

Beiträge: 383

Und wenn Du alle Kommandos nacheinander mit einem eigenen Shell-Befehl ausführst? Dann dürfte es ja eigentlich kein Problem geben, oder doch?

Gruß FatFire

Ghaldez

(Themenstarter)
Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

FatFire hat geschrieben:

Und wenn Du alle Kommandos nacheinander mit einem eigenen Shell-Befehl ausführst? Dann dürfte es ja eigentlich kein Problem geben, oder doch?

Gruß FatFire

Hmm ? wie meinst du das ?

FatFrog

Avatar von FatFrog

Anmeldungsdatum:
19. März 2007

Beiträge: 383

Ahhh, vergiss das. Dummes Geseiere was so leider nicht funktioniert. Werde mich nachher nochmal dransetzen und was ausprobieren.

Gruß FatFire

Ghaldez

(Themenstarter)
Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

FatFire hat geschrieben:

Ahhh, vergiss das. Dummes Geseiere was so leider nicht funktioniert. Werde mich nachher nochmal dransetzen und was ausprobieren.

Gruß FatFire

Ok vielen dank!

FatFrog

Avatar von FatFrog

Anmeldungsdatum:
19. März 2007

Beiträge: 383

Hm, vielleicht hilft es. Mit einem einfachen Shell-Durchlauf wird das wahrscheinlich nichts. Aber Du kannst die ganze Geschichte in einer virtuellen Shell aufbauen.
Ich hab da jetzt als Beispiel mal ne kleine Terminal-Emulation gebastelt (ja, bevor es ein anderer gemerkt, ist geklaut von hier, aber ein wenig umgeschrieben, weil es so bei mir nicht lief).

PRIVATE prozess AS Process 'Handle zum Prozess

PUBLIC SUB Form_Open()
  prozess = EXEC ["bash", "--noediting"] FOR INPUT OUTPUT 'öffne eine Bash, merk Dir den Handle
END

PUBLIC SUB Form_Close()
  prozess.Close 'nach Schliessen der Form kill die Bash
END

PUBLIC SUB Process_Read()
  DIM puffer AS String
  LINE INPUT #LAST, puffer 'lese die Ausgabe vom Prozess ein
  Ausgabe.Text = Ausgabe.Text & gb.NewLine & puffer 'gib die Ausgabe aus
  Ausgabe.Pos = Len(Ausgabe.Text) 'setze fenster
END 

PUBLIC SUB Eingabe_KeyPress()
  DIM puffer AS String
  IF key.Code = key.Return THEN 'wenn Return gedrückt wurde
    puffer = Eingabe.Text 'hol den Befehl aus dem Eingabetextfeld
    Ausgabe.Text = Ausgabe.Text & puffer 'gib den Befehl aus
    PRINT #prozess, puffer 'schick den Befehl an den Prozess
    Eingabe.text = "" 'leere die Eingabemaske
  END IF
END


Zum Testen einfach eine Textarea mit dem Namen "Ausgabe" und eine Textbox mit dem Namen "Eingabe" anlegen.

Wenn Du nach dem gleichen Schema die Befehle alle schön nacheinander abarbeitest, müsste es eigentlich gehen und Du hast jederzeit die volle Kontrolle über Deine kleine Shell.

Gruß FatFire

P.S.: Wichtig! Das geht nur mit Gambas2!!! Nicht Gambas1!

Ghaldez

(Themenstarter)
Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

Hmm da seh ich nun nicht durch ?

wo sollen meine befehle hin ?

Wenn ich das Programm mit dem "pseudo shell" teste wirft der mir in die textarea "]0;root@BlueLinuxGigant: ~/Desktop/Projekt/Gambas/test1 /Till/Downloadroot@BlueLinuxGigant:~/Desktop/Projekt/Gambas/test1 /Till/Download# "
Ohne das ich überhaupt was gedrückt hab 😲

FatFrog

Avatar von FatFrog

Anmeldungsdatum:
19. März 2007

Beiträge: 383

Hmpf, ich weiss, warum ich normalerweise nichts mit Gambas mache...grrrr...
Also musst Du mal schauen, kann sein, dass Du da eventuell anders vorgehen musst, kannst ja mal den Originalentwurf aus dem Forum nehmen, vielleicht klappt der besser bei Dir (der lief bei mir nämlich gar nicht, immerhin tut es was). Kann sein, dass Du aus dem Originalquelltext das Konvertieren von Shell auf grafische Oberfläche machen musst, das ging bei mir ohne:

Puffer = Conv$(Puffer, System.Charset, Desktop.Charset) 'wenn aus der Console lesen
Puffer = Conv$(Puffer, Desktop.Charset, System.Charset) 'wenn in die Console schreiben


Ansonsten hakt es wahrscheinlich mit den Steuerzeichen. Das müsstest Du dann nach dem Lesen ("LINE INPUT...", bzw. vor dem Schreiben "PRINT..." einfügen.

Deine Befehle müsstest Du dann quasi mit

PRINT #prozess, befehle


an Deine virtuelle Bash schicken. Die Antwort von der Bash kriegst Du dann ja in der Subfunktion Process_Read(). In dem Beispiel würde die Antwort dann ja in der Variable puffer stehen.

Hmpf, ich wünschte, ich könnte es besser erklären.

Gruß FatFire

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

Ist die Sprache wirklich so umständlich wie das hier aussieht? 😲

FatFrog

Avatar von FatFrog

Anmeldungsdatum:
19. März 2007

Beiträge: 383

Hm, ne, eigentlich nicht. Aber das ist für Gambasverhältnisse auch schon harter Stoff(deswegen kam die Funktion wohl auch erst in Gambas2 rein, einen Prozess wirklich fernsteuern zu können).
Das Problem an der Sache ist echt die Doku von Gambas, die ist unter aller Sau.

Gruß FatFire

Ghaldez

(Themenstarter)
Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

Also müsste ich für PRINT #prozess z.b. PRINT #wget -x ..... eingeben ?

mensch mensch...ich bin zu doof atm 😳

@Audax: hmm ne eigentlcih ist es nicht schwer... hast in rund 2min. einen taschenrechner fertig 😉

und das gewollte programm steht ja auch schon nur das auslesen der shell ist in gambas eine hürde ☹

Antworten |