2012-03-13 3 views
0

я работаю над сценарием, который будет печатать таймер и пытаются повторно использовать такую ​​функцию:таймера к бесконечности

def timer(m,x): 
    for i in range(1,x): 
     sys.stdout.write('\r%s\b%d' % (m,i)) 
     sys.stdout.flush() 
     sleep(1) 
     sys.stdout.write('\r \b') 

Теперь, часть сценария, где я хочет таймер, который будет отображаться как это:

host_alive = "ping -c1 myServer" 
cmdStat, cmdOut = commands.getstatusoutput(host_alive) 

while True: 
    if cmdStat != 0: 
     (cmdStat,cmdOut) = commands.getstatusoutput(host_alive) 
     print "Still NOT ready!!" 
    else: 
     break 

Как я могу напечатать таймер без указания range()? Есть ли обходной путь? Приветствия!

ответ

2
def timer(m): 
    i = 0 
    while True: 
     sys.stdout.write('\r%s\b%d' % (m,i)) 
     sys.stdout.flush() 
     sleep(1) 
     sys.stdout.write('\r \b') 
     i = i + 1 
+0

это прекрасно работает как функция, но на самом деле не подходит для моего сценария. После второго 'command.getstatusoutput()' в фрагменте, когда мне это нравится: 'timer ('Still NOT ready .....')' он никогда не выходит из цикла и продолжает продолжать. Ура !! – MacUsers

+0

Любая идея, как я могу пробить 'timer()', когда 'cmdStat' становится нулевым (0)? Ура !! – MacUsers

+0

вместо «while True:« просто напишите », а cmdStat! = 0:« – Asgeir

1

Возможно, лучший вариант будет в цикле while. Пример:

def timer(max): 
    while counter > 0: 
     print '%d seconds remain' % max 
     sleep(1) 
     max -= 1 
+0

это не значит для _infinity_ - не так ли? Я хотел, чтобы таймер продолжал идти, пока не будет выполнено определенное условие. В вашем примере верхний предел должен быть указан, что полностью противоположно мне. Ура !! – MacUsers

+1

Подсчет _down_ до бесконечности не имеет смысла, что так всегда. Если вы не имеете в виду ваш таймер, чтобы перейти к отрицательным значениям. –

+0

Ну, это правда! Я действительно не имел в виду грамотную бесконечность и особенно «обратный отсчет», а просто __timer__ для запуска _until_ определенное условие выполнено. Я думаю, что я должен установить предел для максимального времени цикла. Исходный пост и тема исправлены. Ура !! – MacUsers

2

Прежде всего commands модуля является устаревшим и заменен subprocess модуля.

Во-вторых, для представления бесконечности в python вы можете использовать float('inf'). Символично, что вы имеете в виду бесконечность.

def timer(m): 
    i = 0 
    while i<float('inf'): #this is symbolic and in essence similar to while True 
     sys.stdout.write('\r%s\b%d' % (m,i)) 
     sys.stdout.flush() 
     sleep(1) 
     sys.stdout.write('\r \b') 
     i += 1 
+0

Я знаю о командах, но это старый сценарий. Во-вторых, вы действительно хотели сказать: i + = 1 - правильно? – MacUsers

+0

Правильно. Опечатки – jerrymouse

Смежные вопросы