Forum: PC-Programmierung Womit Linux consolen anwendung schreiben?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von svenner (Gast)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Hallo
Ms Dos mit Basic ist ewig her doch in meinem Kopf noch frisch und 
lebendig. Ich habe jetzt viele Jahre Webanwendungen Java und Python 
Notebooks geschrieben doch heute stand ich vor einem Problem. Ich wollte 
mir nur mal schnell einige variablen und Daten geordnet anzeigen lassen 
(Python). Also schnell eine Loop drum Print und gut. Da war es wieder 
Print mit Position ala Locate Print. Das könnte man jetzt brauchen.
Nur wie stellt man das an? nach Langem Googlen hab ich zumindest 
einigermaßen was gefunden.
Aber so richtig ordentlich schaut das nicht aus der Blinkende Cursor 
spring je nach Print über den Bildschirm...

Wie oder womit würde man in der heutigen zeit eine "Consolen" Anwendung 
schreiben welche wie Früher mit Menüs mit Linien aus Ascii code und 
villeicht sogar Farbe bestehen. Zielsystem in diesem Fall ein Ubuntu 
Server ohne Click & bunt.

von c.m. (Gast)


Bewertung
3 lesenswert
nicht lesenswert
https://de.wikipedia.org/wiki/Ncurses
wobei das nur aufgeschnapptes halbwissen ist. schau mal ob es vielleicht 
python bindings für ncurses gibt, falls du bei einer scriptsprache 
bleiben willst.

von foobar (Gast)


Bewertung
3 lesenswert
nicht lesenswert
ncurses ist der Klassiker

von Nop (Gast)


Bewertung
3 lesenswert
nicht lesenswert
svenner schrieb:

> Wie oder womit würde man in der heutigen zeit eine "Consolen" Anwendung
> schreiben welche wie Früher mit Menüs mit Linien aus Ascii code und
> villeicht sogar Farbe bestehen. Zielsystem in diesem Fall ein Ubuntu
> Server ohne Click & bunt.

Hast Du Dir mal ncurses angesehen?

von Kaj G. (Firma: RUB) (bloody)


Bewertung
2 lesenswert
nicht lesenswert
Du koenntest dir mal 'dialog' anschauen.
dialog(1) - Linux man page
dialog - display dialog boxes from shell scripts
https://linux.die.net/man/1/dialog


Dialog: An Introductory Tutorial
https://www.linuxjournal.com/article/2807


Wenn es um das Setzen der Position des Konsolencursors geht, kann man 
sich mit einem kleinen Hack behelfen:
void goto_xy(int x, int y)
{
    printf("\x1B[%i;%if", x, y);
}
https://stackoverflow.com/questions/8683526/gotoxy-implementation-for-linux-using-printf
http://www.termsys.demon.co.uk/vtansi.htm

In Python:
import sys

def goto_xy(x, y):
    # writes to stdout like print, but
    # without the newline
    sys.stdout.write('\x1B[{};{}f'.format(x, y))

: Bearbeitet durch User
von Schlingel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Für dialog(1) gibt es auch einen Python-Wrapper:
http://pythondialog.sourceforge.net/

von Ralph S. (jjflash)


Angehängte Dateien:

Bewertung
3 lesenswert
nicht lesenswert
... wie Vorredner schon geschrieben haben ist in der Linuxkonsole 
ncurses der Klassiker (bspw. ist der Midnight Commander mit ncurses 
realisiert).

Für kleine schnelle Dinge in der Konsole und für den Grundkurs C meiner 
Auszubildenden habe ich txtools.c / .h geschrieben und die Namesgebung 
der Funktionen und Deklarationen an Turbo-C / Turbo Pascal angelehnt:

gotoxy(x,y)
settextcolor(uint8_t col)
setbkcolor(uint8_t col)

int getch(void)
int keypressed(void)
uint32_t readkey(void)

Wenn du auch in C programmierst ist das für dich vielleicht brauchbar 
!?!.

Eine sehr kleine Demo und den Sourcecode findest du im Anhang.

Gruß Ralph

von Eric B. (beric)


Bewertung
2 lesenswert
nicht lesenswert
svenner schrieb:
> Aber so richtig ordentlich schaut das nicht aus der Blinkende Cursor
> spring je nach Print über den Bildschirm...

Vor allen PRINT-Befehlen erst mal den Cursor ausschalten kann schon 
Abhilfe und Performance-Steigerung bringen.

von mmm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Für Python wäre das dann wohl curses (ohne n davor)...

von bingo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
svenner schrieb:
> Print mit Position ala Locate Print

Ich mache das immer mit Python und ANSI-Escape-Sequenzen
http://ascii-table.com/ansi-escape-sequences.php

z.B.
print '\33[10;5H Zucker 1.20 Euro'
print '\33[11;5H Milch  1.80 Euro'
print '\33[12;5H ----------------'
print '\33[13;5H Summe  3.00 Euro'

Das ist fast identisch wie locate

von Jay W. (jayway)


Bewertung
0 lesenswert
nicht lesenswert
Als "Ewiggestriger" nutze ich gern Free(Turbo)Pascal mit 
Free(Turbo)Vision für solche Dinge, alternativ auch Perl mit ncurses.

Gruß Jay

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht lesenswert
Jay W. schrieb:
> Free(Turbo)Pascal mit
> Free(Turbo)Vision für solche Dinge

Hat auch den Vorteil daß das Kompilat praktisch auf jedem Linux der 
letzten 20 Jahre und der nächsten 20 Jahre läuft und keinerlei libs 
installiert haben muss, wenn man keine Threads benutzt noch nichtmal die 
libc.

von A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Viele haben so ihre lingua franca für einfache Fälle. Bei mir ist es 
Perl. Nicht weil das die beste Sprache ist, sondern weil ich die über 
die Jahrzehnte in DOS, Unix, OS/2, Linux und Windows verwendete. 
Entweder gab es Perl schon, oder ich habs eben portiert.

Auch schon für GUI via Tk (Unix, Windows).

: Bearbeitet durch User
von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
Jay W. schrieb:
> Als "Ewiggestriger" nutze ich gern Free(Turbo)Pascal mit
> Free(Turbo)Vision für solche Dinge, alternativ auch Perl mit ncurses.

Irgendwie freut mich dass, dass nicht nur ich noch FreeVision verwende. 
Hauptsächlicher Nachteil hierbei ist, dass die Konsole im Textmodus 
(kein x am laufen) nicht mehr mittels ALT-Fx umschaltbar sind. Leider.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.