Seite 1 von 1

Farben etc. in Kommandozeile?

Verfasst: Samstag 20. September 2003, 10:22
von VoLANo
Hallo!

Ich möchte der Übersicht halber Farben in mein Kommandozeilen-Tool einbauen. Gibt es da eine Möglichkeit?
Was auch noch nett wäre, wo ich mir aber (fast) sicher bin dass es nicht geht .. eine Art Progressbar, also am Anfang siehts so aus.
[----------]
und dann irgendwann:
[||||||||--]
falls das jemand versteht .. :D

Grüße, VoLANo

Verfasst: Samstag 20. September 2003, 10:50
von Dookie
Hi VoLANo,

wenns für Unix/Linux sein soll, schau Dir mal curses an http://www.python.org/doc/current/lib/m ... urses.html


Dookie

Verfasst: Samstag 20. September 2003, 12:35
von Beyond
Oder benutze entsprechende Escape-Sequenzen!
Google mal danach.
Allerdings ist die Ausgabe dann relativ unrauchbar, um sie in Dateien zu loggen.
Daher habe das wieder aufgegeben.
(mit cat kann man natürlich die Ausgabe herstellen ...)

cu beyond

Fortschrittsbalken

Verfasst: Montag 13. Oktober 2003, 10:03
von jocsch
Hallo!
Eine kleine Fortschrittsbalkenfunktion (ziemlich flexibel konfigurierbar) habe ich mal programmiert:

Code: Alles auswählen

#!/usr/lib/python
from sys import stdout

def showProgress(out, p, typ = 'bar', barlenght = 40, yop = '-', nop = '=', lt = '[', rt = ']'):
	if typ == 'percent':
		stdout.write('%3i%%\r' % (100 * p))
	elif typ == 'bar':
		l = int(barlenght * p)
		l0 = barlenght - l
		stdout.write(lt + yop * l + nop * l0 + rt + 
		'\r')
	elif typ == 'value':	
		stdout.write('%s\r' % p)
		
if __name__=='__main__':
	x = 100000
	for i in xrange(x+1):
		showProgress(stdout, float(i)/float(x), 'bar')
	print	
	print 'operation successfuly completed.'	
Einfach mal ausprobieren - immer dankbar für Kommentare!!!

Gruss, jocsch

Verfasst: Montag 13. Oktober 2003, 12:37
von joerg
Hallo,
an Fortschrittsbalken habe ich auch noch einen zu bieten, etwas mehr Funktionalität als bei jocsch, dafür aber auch viel mehr Code. ;-(

Zu beachten ist, daß eine korrekte Funktion von '\r' (Cursor auf den Zeilenanfang setzen) Voraussetzung ist. Das geht z.B. innerhalb von IDLE nicht.
Jörg

Code: Alles auswählen

import sys

class Spinner(list):
    """list that behaves like a ring buffer,
    next() gives the next element, starting over
    when done"""

    def __init__(self, *arg, **kwarg):
        list.__init__(self, *arg, **kwarg)
        self._index = -1

    def next(self):
        if self._index < (len(self)-2):
            self._index += 1
        else:
            self._index = 0
        return self[self._index]


class TxtScale:
    def __init__(self, width=40, template='[%s%c%s] % 10g |',
                 arrow='^', leftSign='-', rightSign='-',
                 minVal=0.0, maxVal=1.0):
        self.width = width
        self.template = template
        self.arrow = arrow
        self.leftSign = leftSign
        self.rightSign = rightSign
        self.minVal = minVal
        self.maxVal = maxVal

    def set(self, val, *args):
        v = max(min(val, self.maxVal), self.minVal)
        i = (int(round(self.width * (v - self.minVal)/(self.maxVal-self.minVal))) or 1) - 1
        j = self.width-i-1
        sys.stdout.write('\r')
        sys.stdout.write(self.template % ((self.leftSign*i, self.arrow,
                                           self.rightSign*j, val)+args))
        sys.stdout.flush()

    def clear(self):
        sys.stdout.write('\r')
        sys.stdout.flush()

if __name__ == '__main__':
    import time, math
    def test1():
        print "This is a scale:"
        s = TxtScale(10, minVal=-1.0, maxVal=1.0, template='<%s%c%s> x = % 10g')
        for i in range(100):
            s.set(math.sin(i/10.0))
            time.sleep(0.05)
        print

    def test2():
        print "This is a progress bar:"
        p = TxtScale(40, minVal=0.0, maxVal=100.0,
                     leftSign='#', arrow='#', rightSign=' ',
                     template= '|%s%c%s| % 3d%% | %s')
        for i in range(101):
            p.set(i, (i < 100) and 'Running' or 'Done   \n')
            time.sleep(0.05)

    def test3():
        print "This is a progress bar with a spinner:"
        p = TxtScale(40, minVal=0.0, maxVal=100.0,
                     leftSign='#', arrow='#', rightSign=' ',
                     template= '|%s%c%s| % 3d%% %c')
        x = Spinner('|/-\\')
        #x = Spinner(' .o0O0o.')
        for i in range(101):
            p.set(i, x.next())
            time.sleep(0.05)
        print
    test1()
    test2()
    test3()

Verfasst: Montag 13. Oktober 2003, 15:10
von jocsch
Gut das!
Was haltet ihr denn von einer kleinen Fortschrittsbalken - Hall of fame ... ?

gruesse jocsch

Verfasst: Dienstag 14. Oktober 2003, 11:11
von joerg
jocsch hat geschrieben:Gut das!
Was haltet ihr denn von einer kleinen Fortschrittsbalken - Hall of fame ...
Oh, das ist bestimmt spaßig. Irgendwann gibt es dann ASCII-Art-Häschen, die von links nach rechts hoppeln, und dazu rechts einen Igel, die einen dummen Spruch macht (Fortschrittsbalken mit Sound), oder so ähnlich. ;-)

Grüße!
Jörg