Kommandos auswerten

Gast #4611265
Lesenswert?
• ▲
▼
Moin.

Wie programmiert man am Besten eine Anwendung, welche ein Mini Telnet 
Terminal enthalten soll.

Es soll ein Kommandopromt erscheinen und es sollen verschiedene Befehle 
entgegen genomen werden, die dann entsprechende Aktionen ausführen.
Dabei sollen auch Parameter berücksichtigt werden.

Macht man das am Besten über Stringfunktionen (scheiden, teilstrings 
filtern usw) und if then konstrukte?
#4611494
Lesenswert?
• ▲
▼
Es gibt eine unendliche vielzahl an möglichkeiten das umzusetzen. Es 
kommt auch darauf wofür man es programiert, und woher die Eingaben 
kommen. Was du beschreibst ist eine Kombination aus 3 Dingen:
  1) Die Eingabeschnittstelle. Im falle von Telnet wäre das eine TCP 
verbindung, denn telnet sendet einfach nur eingaben von stdin über eine 
tcp verbindung, und zeigt auf stdout an, was zurück kommt. Dies 
erfordert dann ein programm, welches tcp anfragen behandelt. Andere 
eingabeschnittstellen ohne telnet währen z.B. direkt über stdin, ohne 
netzwerk kram.
  2) Ein interpreter/shell. Das programm welches die befehle entgegen 
nimmt. beispiele wären bash, sh, dash, csh, python, php, nodejs, ... 
Meistens werden die befehle von stdin oder einer Datei geholt, um das 
Netzwerk kann sich dann telnet oder ssh kümmern.
  3) Die auszuführenden befehle. Hier wird meist zwischen 
Programmkonstrukten (if,while,etc.), builtins (eval,test,...) und 
befehlen unterschieden.

Die umsetzung hängt dann aber immer von den Anforderungen ab.
Auf einem UC könnte z.B. alles in einer anwendung sein, den netzwerkteil 
vom ip stack geregelt werden, der interpreter ein strcmp und die befehle 
eine liste. Den code sollte man dan aber trotzdem sauber unterteilen.
Auf einem PC will man eventuell nur den shell teil umsetzen, oder einen 
Interpreter, jenachdem auch mit fixer befehlsliste.

Es kommt eben ganz darauf an, was genau man wofür genau machen will, es 
gibt nicht wirklich die eine richtige lösung.
#4611517
Lesenswert?
• ▲
▼
Ich vermute, du meinst eigentlich kein Telnet-Terminal, sondern einen 
Kommandozeilen-Interpreter. Was Daniel beschreibt, sind mehrere separate 
Programme, die auf einem Unix-artigen System üblicherweise alle 
zusammenspielen, um dir deine Kommandozeile auf den Bildschirm zu 
zaubern. Ein Telnet-Terminal tut dabei nichts weiter, als Eingaben des 
Benutzers entgegenzunehmen und weiterzuleiten, sowie empfangene 
Ausgabedaten anzuzeigen.

T. schrieb:
> Macht man das am Besten über Stringfunktionen (scheiden, teilstrings
> filtern usw) und if then konstrukte?

Diese wird man definitiv dafür benötigen. Zunächst mal musst du dir aber 
eine Syntax für deine Kommandos überlegen, und ob es wie eine typische 
Shell hauptsächlich externe Kommandos aufruft oder nur programminterne 
Funktionen verfügbar machen soll.
Gast #4612200
Lesenswert?
• ▲
▼
T. schrieb:
> s soll ein Kommandopromt erscheinen und es sollen verschiedene Befehle
> entgegen genomen werden, die dann entsprechende Aktionen ausführen.
> Dabei sollen auch Parameter berücksichtigt werden.

Lade dir die Lernbetty runter, dort findest du genau was du suchst - und 
bereits weitestgehend fertig vorgekaut.


Und nochwas: ne Python IST ne Schlange.

Und wer 'subtil' für nen Blumendünger hält, hat's auch nicht gerafft.

W.S.
Gast #4612202
Lesenswert?
• ▲
▼
Es wäre nun aber trotzdem sinnvoll zu wissen, in welcher 
Programmiersprache das Ganze denn implementiert werden soll.
In Python kann man eben ganz anders vorgehen als etwa in C.
Minimalbeispiel:

1
#!/usr/bin/env python
2

3
def command_foo(args):
4
    print "Command foo called with args " + str(args)
5

6
def command_bar(args):
7
    print "Command bar called with args " + str(args)
8

9
while True:
10
    input = raw_input("> ")
11

12
    cmd  = input.split()[0]
13
    args = input.split()[1:]
14

15
    cmd_func = globals().get("command_" + cmd)
16

17
    if cmd_func:
18
        cmd_func(args)
19
    else:
20
        print cmd + ": Unknown command"

Zusätzlich könnte man dann jeder Kommandofunktion auch noch einen
Dokumentationskommentar geben und ein help-Kommando implementieren,
das die Dokumentationskommentare aller Kommandofunktionen ausgibt.
Versuch das mal so in C ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren