Farbiger Text auf Konsole(Terminal)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
quots
User
Beiträge: 5
Registriert: Freitag 11. April 2008, 19:35

Freitag 11. April 2008, 20:00

Ich bin Newbe in Python und will ein unter Rexx (WinXP) laufendes Programm in Python zum Laufen bringen.
Dazu benötige ich bei der Text-Ausgabe auf Konsole (=Terminal) verschieden farbigen Text.
Unter Rexx (es läuft R4 von Kilowatt Software unter Win XP) ist das ganz simpel. Man nutzt angeblich das ANSI-Relikt. Das sieht dann so aus:
-----
vor = d2c(27)||"["
nach = "m"
int=vor||"1"||nach
norsw = vor||"0;30"||nach /* schwarz, also unsichtbar auf schwarz */
norws = vor||"0;37"||nach /* normalweiss */
intws = vor||"1;37"||nach /* intensivweiss fuer eingelesene Werte */
intrt = vor||"1;31"||nach /* intensivrot fuer errechnete Werte */
intgr = vor||"1;32"||nach /* intensivgrün fuer noch freie Werte */
...
eol=d2c(201)
...
say intrt||eol||"1" /* ergibt eine intensivrote "Ecke oben links" und eine 1 */
------

Die Variable "eol" (besser ist natürlich ein unverfänglicherer Name) läßt sich in Python nachbilden:
eol=chr(201)
...
print eol

Leider gelingt mir kein Konstrukt, dass verschieden farbige Zeichen so simpel darstellt. Den Wunsch auf eine allgemein auf allen Konsolen (Terminals) laufende Konstruktion habe ich bereits aufgegeben...

Gibt es doch eine Möglichkeit?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. April 2008, 20:13

quots hat geschrieben:Gibt es doch eine Möglichkeit?
ANSI.sys gibt es unter Windows XP nicht mehr. Effbot hat ein Console-Modul, damit sollte es gehen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
quots
User
Beiträge: 5
Registriert: Freitag 11. April 2008, 19:35

Samstag 12. April 2008, 07:57

Effbots Console-Modul leitet ein: "It probably works under Windows XP, but it hasn’t been tested on that platform." und es ist letztmalig geupdatet 2000.
Ein nicht vertrauensbildender Umstand.
Auch benötige ich kein Modul zur Textpositionierung, weil ich fortlaufend ausgebe, sondern ausschliesslich eines zum Einfärben des Textes. Aber vielleicht geht es damit doch, muß mal sehen. Danke!
BlackJack

Samstag 12. April 2008, 09:34

Es geht um Konsolenausgaben wie man sie aus den alten DOS-Zeiten kennt. Da würde ich jetzt nicht dauernd Updates erwarten. Wenn das Modul funktioniert, funktioniert es.

Du kannst es ja unter XP ausgiebig testen und dem Effbot sagen, wie er die Informationen auf der Seite mal updaten kann.
lunar

Samstag 12. April 2008, 11:31

BlackJack hat geschrieben:Du kannst es ja unter XP ausgiebig testen und dem Effbot sagen, wie er die Informationen auf der Seite mal updaten kann.
"Es geht um Konsolenausgaben wie man sie aus den alten DOS-Zeiten kennt. Da würde ich jetzt nicht dauernd Updates erwarten. Wenn das Modul funktioniert, funktioniert es.
"Actually... the Console Module works with Windows XP." <- gepostet am 31. Jul 1007 auf eben jener Seite ;)
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Samstag 12. April 2008, 14:27

lunar hat geschrieben:...gepostet am 31. Jul 1007 auf eben jener Seite ;)
Whooha, das gibt es schon so lange? :shock: :lol:
lunar

Samstag 12. April 2008, 15:32

querdenker hat geschrieben:
lunar hat geschrieben:...gepostet am 31. Jul 1007 auf eben jener Seite ;)
Whooha, das gibt es schon so lange? :shock: :lol:
Cool... man muss also nur "Vorschau" und "Absenden" verwechseln, um die Erfindung von Python um mindestens tausend Jahre rückzudatieren ;)
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 12. April 2008, 15:46

Schade das es kein Modul gibt, welches unter Linux und Windows gleichzeitig funktioniert :(

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 12. April 2008, 16:12

Hint: IPython ist unter Windows und Linux gleichzeitig bunt :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
quots
User
Beiträge: 5
Registriert: Freitag 11. April 2008, 19:35

Montag 14. April 2008, 19:23

Hallo, ich bins wieder,
1. effbot's ConsoleModul arbeitet tatsächlich unter XP. Habs geladen und probiert. Manche der Befehle arbeiten aber nicht fehlerfrei.
2. ->lunar: Ja der bestätigende Satz zu XP steht da, leider erst am Ende der ganzen Seite...
3. ConsoleModul kann offenbar aber nur mit einer umständlichen Funktion farbigen Text ausgeben. Will sagen. einen einfachen Steuerbefehl zum temporären Umschalten habe ich nicht erzeugen können, vielleicht bin ich nicht kreativ genug (b.B. will ich: print a+b+c..., wobei nur b rot sein soll, a und c weiß, alles auf schwarz). Zweiter Nachteil für mich, die Console ist mit den Positionsangaben ein statisches Fenster. Mir wäre ein scrollendes Fenster beim Portieren lieber...
4. IPython: Ich scheitere bereits an der Zeremonie des Installierens oder bin einfach zu ... . Ich erhalte ein PythonWin 2.5.2 mit einem "Interaktiven Fenster" darin. Und nun? Wie bekomme ich dort beispielsweise farbigen Text hineinbefohlen?
5. Überhaupt finde ich die Syntax-Beschreibungen zu umständlich. Was ich bei allem (Python, Console, IPython u.a.) vermisse, sind wenigstens ein Beispiel zu jeder (!) Aussage, weil man sonst die Aussagen auf Englisch nicht richtig deuten kann. Ich liebe gut geschriebene Bücher!
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 14. April 2008, 22:13

quots hat geschrieben:3. ConsoleModul kann offenbar aber nur mit einer umständlichen Funktion farbigen Text ausgeben. Will sagen. einen einfachen Steuerbefehl zum temporären Umschalten habe ich nicht erzeugen können, vielleicht bin ich nicht kreativ genug (b.B. will ich: print a+b+c..., wobei nur b rot sein soll, a und c weiß, alles auf schwarz).
Wenn a, b und c Objekte sind, die sich selbst farbig darstellen können, ist das gar kein Problem.
quots hat geschrieben:Zweiter Nachteil für mich, die Console ist mit den Positionsangaben ein statisches Fenster. Mir wäre ein scrollendes Fenster beim Portieren lieber...
Positionsangaben und Scrollen vertragen sich nicht, da du ja dann nicht die Sicherheit hast dass wenn du an Position 0,0 ein A hingeschrieben hast, da immer noch ein A ist - das Fenster könnte auch schon weitergescrollt sein.
quots hat geschrieben:4. IPython: Ich scheitere bereits an der Zeremonie des Installierens oder bin einfach zu ... . Ich erhalte ein PythonWin 2.5.2 mit einem "Interaktiven Fenster" darin. Und nun? Wie bekomme ich dort beispielsweise farbigen Text hineinbefohlen?
IPython ist nur eine alternative Shell für den Python-Interpreter die Farben benutzt. Eigene Befehle zum ausgeben von farbigen Text bietet sie nicht.
quots hat geschrieben:5. Überhaupt finde ich die Syntax-Beschreibungen zu umständlich. Was ich bei allem (Python, Console, IPython u.a.) vermisse, sind wenigstens ein Beispiel zu jeder (!) Aussage, weil man sonst die Aussagen auf Englisch nicht richtig deuten kann. Ich liebe gut geschriebene Bücher!
Syntax-Beschreibungen?

Apropos, es gibt den Interpreter, da kannst du dir deine Beispiele selbst bauen und testen.

Alternativ: ein entwicklerfreundliches Betriebssystem verwenden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
quots
User
Beiträge: 5
Registriert: Freitag 11. April 2008, 19:35

Dienstag 15. April 2008, 09:48

->Leonidas: Ad 1) Schreib mir bitte eine Beispiellösung auf! Meine Aufgabe war doch klar formuliert. Ich wollte Zeichenreihen in gemischten Farben ausgeben. In Rexx geht das so wie ganz oben skizziert. Ich definiere "vor", "nach" und die Zahlencodes oder noch einfacher das jeweils Ganze und kann dann die Zeichen (Variable a, b, c repräsentieren selbige)ausgeben, wobei die Doppelpipe zwischen Zeichenketten dem + unter Python entspricht:
(unter Rexx) say intws||a||intrt||b||intws||c
(unter Python) print ?+a+??+b+?+c
Welche Funktion soll ich für ? und ?? einsetzen, wobei keine feste Position erzeugt werden soll?
Ad 4) Wenn Ipython keine eigenen Befehle zur farbigen Textausgabe besitzt, warum hast Du dann geschrieben, dass IPython unter Linux und Windows "gleichzeitig bunt" seien? Ein Witz?
Ad 5) "entwicklerfreundliches BS verwenden" ??? Mein (Beispiel)Prog. läuft unter Rexx unter OS/2 und unter WinXP. Unter Linux gibts Rexx als "Regina", wo es läuft. Nun möchte ich das Ganze aber nach Python portieren. Komischerweise laufen die Steuerbefehle zur farbigen Textausgabe unter verschiedenen Konsolen=Teminals unter Linux, man braucht gar kein Rexx. Unter WinXp aber gehts nur mithilfe von Rexx. Offenbar ist es dort nicht entbehrlich. Aber wie sieht es unter Python unter XP aus? Hier geht es weder unter der IDLE noch unter "Command Line". Es muß doch einen Weg geben, denn wieso kann Rexx das unter XP in der Shell?
BlackJack

Dienstag 15. April 2008, 10:04

@quots: 4. War kein Witz sondern ein Hinweis auf ein Python-Programm, das sowohl unter Linux als auch unter Windows farbige Textausgaben hinbekommt. Man könnte ja mal auf die Idee kommen in den Quelltext zu schauen wie das gemacht wird…

5. Die Rexx-Implementierung unter Windows wird wahrscheinlich selbst einen ANSI-Interpreter in den Ausgaberoutinen eingebaut haben.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 15. April 2008, 15:18

quots hat geschrieben:->Leonidas: Ad 1) Schreib mir bitte eine Beispiellösung auf! Meine Aufgabe war doch klar formuliert. Ich wollte Zeichenreihen in gemischten Farben ausgeben. In Rexx geht das so wie ganz oben skizziert. Ich definiere "vor", "nach" und die Zahlencodes oder noch einfacher das jeweils Ganze und kann dann die Zeichen (Variable a, b, c repräsentieren selbige)ausgeben, wobei die Doppelpipe zwischen Zeichenketten dem + unter Python entspricht:
(unter Rexx) say intws||a||intrt||b||intws||c
(unter Python) print ?+a+??+b+?+c
Welche Funktion soll ich für ? und ?? einsetzen, wobei keine feste Position erzeugt werden soll?
Das geht in Windows schlichtweg so nicht, weil das Terminal keine ASCII-Color-Sequenzen einfach so unterstützt. Über Hacks wie mit PyReadline scheint das auch irgendwie zu gehen, PyReadline welches von Ipython verwendet wird, macht das in etwa so.

Ein Beispiel kann ich dir nicht geben, denn ich kann das mangels Windows nicht testen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
quots
User
Beiträge: 5
Registriert: Freitag 11. April 2008, 19:35

Dienstag 15. April 2008, 23:32

Also bringt mir Python nur Mühe, aber keine Möglichkeit, ein auf beiden Plattformen laufendes Programm zu erzeugen.
So muß ich wohl oder übel bei Rexx bleiben, obwohl das nach Ansicht meines Sohnes urst-alt sei.
Die Systemportabilität von Programmen ist aber doch wohl immer noch ein erstrebenswertes Ziel oder?
Antworten