Это психоделический индикатор прогресса для bash-скриптинга от nExace. Его можно вызвать из командной строки как «./progressbar x y», где «x» - это время в секундах, а «y» - это сообщение, связанное с этой частью процесса.
Внутренняя функция progressbar () сама по себе также хороша, если вы хотите, чтобы другие части вашего скрипта управляли индикатором выполнения. Например, отправив «Индикатор прогресса 10« Создание дерева каталогов »; будет отображаться:
[####### ] (10%) Creating directory tree
Конечно, это будет приятно психоделический, хотя ...
#!/bin/bash
if [ "$#" -eq 0 ]; then echo "x is \"time in seconds\" and z is \"message\""; echo "Usage: progressbar x z"; exit; fi
progressbar() {
local loca=$1; local loca2=$2;
declare -a bgcolors; declare -a fgcolors;
for i in {40..46} {100..106}; do
bgcolors+=("$i")
done
for i in {30..36} {90..96}; do
fgcolors+=("$i")
done
local u=$(( 50 - loca ));
local y; local t;
local z; z=$(printf '%*s' "$u");
local w=$(( loca * 2 ));
local bouncer=".oO°Oo.";
for ((i=0;i<loca;i++)); do
t="${bouncer:((i%${#bouncer})):1}"
bgcolor="\\E[${bgcolors[RANDOM % 14]}m \\033[m"
y+="$bgcolor";
done
fgcolor="\\E[${fgcolors[RANDOM % 14]}m"
echo -ne " $fgcolor$t$y$z$fgcolor$t \\E[96m(\\E[36m$w%\\E[96m)\\E[92m $fgcolor$loca2\\033[m\r"
};
timeprogress() {
local loca="$1"; local loca2="$2";
loca=$(bc -l <<< scale=2\;"$loca/50")
for i in {1..50}; do
progressbar "$i" "$loca2";
sleep "$loca";
done
printf "\n"
};
timeprogress "$1" "$2"
Вероятно, вам нужен словарь вместо отдельных переменных. Например,
d = {}
for i in range(3):
d["group" + str(i)] = self.getGroup(selected, header+i)
Если вы настаиваете на фактическом изменении локальных переменных, вы можете использовать функцию locals
:
for i in range(3):
locals()["group"+str(i)] = self.getGroup(selected, header+i)
С другой стороны, если вы действительно хотите изменить переменные экземпляра класса, который вы ' re in, то вы можете использовать функцию setattr
for i in group(3):
setattr(self, "group"+str(i), self.getGroup(selected, header+i)
И, конечно же, со всеми этими примерами я предполагаю, что вам нужен не просто список:
groups = [self.getGroup(i,header+i) for i in range(3)]
Похоже, вы хотите использовать вместо этого список:
group=[]
for i in range(3):
group[i]=self.getGroup(selected, header+i)
Используйте список.
groups = [0]*3
for i in xrange(3):
groups[i] = self.getGroup(selected, header + i)
или более "Pythonically":
groups = [self.getGroup(selected, header + i) for i in xrange(3)]
Что бы это ни стоило, вы могли попытаться создать переменные "неправильным" способом, т. Е. путем изменения словаря, в котором хранятся их значения:
l = locals()
for i in xrange(3):
l['group' + str(i)] = self.getGroup(selected, header + i)
, но это действительно плохой тон, и, возможно, даже не гарантируется его работа.
Вы могли получить доступ к атрибуту __ dict __
вашего класса:
for i in range(3)
self.__dict__['group%d' % i]=self.getGroup(selected, header+i)
Но почему вы не можете просто использовать массив с именем group
?