Seite 1 von 1

Simulierte Konsole/Shell

Verfasst: Do Okt 22, 2020 8:23 pm
von Xin
Dann werde ich auch mal eine Frage stellen in Vorbereitung für ein Problem, was ich in der nächsten Zeit lösen muss und meine Experimente bisher eher von überschaubaren Erfolg waren. Ansonsten bin ich auch für ein offenes Brainstorming zu haben, wie man an solche Probleme herangehen könnte.

Folgendes Problem: Ich möchte ein Shell-Programm aufrufen und dann mit dem Programm kommunizieren.
Wenn ich einen Compiler aufrufe ("gcc hworld.c") liefert der eine Text-Ausgabe und beendet sich dann. Soweit ist das auch halbwegs nachvollziehbar.
Nun möchte ich mit einem interaktiven Shell-Programm kommunizieren können, zum Beispiel "mysql" oder "python". Ich muss also als aufrufender Task solange Ausgaben des gerufenden Programms lesen, bis dieses entweder aufhört zu senden oder eine erwartete Ausgabe kommt.

Wenn ich also python starte, erzählt es mir etwas ...

Code: Alles auswählen

xin@dualpower:~/xsd/apps/xbuild$ python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
und wartet dann, bis die drei > kommen, um eine Eingabe zu bringen. Nun möchte ich Befehle absetzen, zum Beispiel

Code: Alles auswählen

>>> print (1+2)
3
>>> 
und das Ergebnis herauslesen können.

Und das idealerweise für Posix und Windows.

Mein Problem dabei ist, dass ich nicht gut mitbekomme, wenn der Task nichts mehr sendet. Befehle wie

Code: Alles auswählen

>>> print (">>>")
>>>
>>> 
machen mir hier das Leben schwerer, ich kann also nicht einfach aufhören zu lesen, wenn die gesuchte Zeichenkette da ist.

Hat da jemand schon Erfahrungen gesammelt?

Re: Simulierte Konsole/Shell

Verfasst: Do Okt 22, 2020 8:55 pm
von cloidnerux
Du wirst mit allen Menschenschnittstellen das Problem haben, dass nichts eindeutig ist. Im Endeffekt musst du Heuristisch ran gehen. Alles Einlesen und Zeiten zwischen '\n' abwarten und die Zeit seit der letzen Ausgabe als timeout nutzen.
In der Python-Shell im speziellen kann man natürlich nach dem letzten <Enter> direkt ein Buchstabe senden und warten bis der Eingabepuffer der Konsole das nächste mal gelesen und ausgegeben wird. Dann halt direkt nen <Backspace> hinterher und dein Befehl.

Re: Simulierte Konsole/Shell

Verfasst: Sa Jul 24, 2021 12:16 pm
von Orioner
Ich bin nicht sicher, ob ich das Problem richtig verstanden habe. Meinst du, du willst etwas schaffen, wie bei diskpart von Windows? Du startest das Programm und es bietet dem Nutzer eine (eigene) Konsolenschnittstelle, über die Befehle eingegeben werden können, die dann entsprechende Antworte/Resultate erzeugen. Z.B.: list disk -> eine Liste mit HDDs wird dargestellt.

Re: Simulierte Konsole/Shell

Verfasst: Do Jul 29, 2021 4:38 pm
von Xin
Hi,

Die letzten Zeit kam ich nicht mehr dazu, daher erst jetzt ein Feedback.
Das Projekt existiert noch, ist aber aus Zeitmangel momentan auf Eis. Ausbildung ist heute vorbei, jetzt kann ich mich wieder um proggen kümmern… :-)

Ich möchte z.B. das Kommando ZIP benutzen aus einem Programm heraus benutzen. Mein Programm sagt „unzip bla.zip“ und zip fragt nach dem Passwort. Das soll mein Programm erkennen und dann antworten.