Simulierte Konsole/Shell

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8763
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Simulierte Konsole/Shell

Beitrag von Xin » Do Okt 22, 2020 8:23 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3115
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Simulierte Konsole/Shell

Beitrag von cloidnerux » Do Okt 22, 2020 8:55 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Orioner
Beiträge: 85
Registriert: Mo Dez 10, 2012 10:52 am

Re: Simulierte Konsole/Shell

Beitrag von Orioner » Sa Jul 24, 2021 12:16 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8763
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Simulierte Konsole/Shell

Beitrag von Xin » Do Jul 29, 2021 4:38 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten