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 ..
Grüße, VoLANo
Farben etc. in Kommandozeile?
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
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
wenns für Unix/Linux sein soll, schau Dir mal curses an http://www.python.org/doc/current/lib/m ... urses.html
Dookie
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
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
-
- User
- Beiträge: 31
- Registriert: Freitag 4. April 2003, 13:09
- Wohnort: Egloffstein (Hundshaupten)
Hallo!
Eine kleine Fortschrittsbalkenfunktion (ziemlich flexibel konfigurierbar) habe ich mal programmiert:
Einfach mal ausprobieren - immer dankbar für Kommentare!!!
Gruss, jocsch
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.'
Gruss, jocsch
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
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()
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
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.jocsch hat geschrieben:Gut das!
Was haltet ihr denn von einer kleinen Fortschrittsbalken - Hall of fame ...
Grüße!
Jörg
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0