2012-03-13 75 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

它工作得很好,但並不適合我的[示例]腳本。在代碼片段中的第二個'commands.getstatusoutput()'之後,當我這樣做時:'timer('還沒有準備好......')'它永遠不會出現在循環中並繼續保持。乾杯!! – MacUsers 2012-03-13 18:21:15

+0

任何想法如何當'cmdStat'變爲零(0)時突破'timer()'?乾杯!! – MacUsers 2012-03-13 22:28:52

+0

而不是「while true:」只寫「而cmdStat!= 0:」 – Asgeir 2012-03-14 09:54:48

1

while循環在這裏可能是一個更好的選擇。例如:

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

它不是真的對_infinity_ - 是嗎?我希望計時器繼續下去,直到滿足特定的條件。在你的例子中,需要指定上限,這與我的要求完全相反。乾杯!! – MacUsers 2012-03-13 17:54:51

+1

數下降到無窮沒有任何意義。除非你的意思是你的計時器進入負值。 – 2012-03-13 18:08:29

+0

嗯,這是真的!我並不是真正意義上的無窮無盡,特別是'倒數計時器',但只是__timer__運行_until_滿足一定的條件。我想我應該爲循環的最大運行時間設置一個限制。原帖和主題現已更正。乾杯!! – MacUsers 2012-03-13 18:29:07

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 2012-03-13 21:49:25

+0

那就對了。錯別字 – jerrymouse 2012-03-14 03:46:25