2012-09-01 159 views
0

所以這是一個腳本,我正在編寫我的哥們公司客戶支持。基本上,它所做的是使用腳本中的IP電話進行呼叫,它可以工作,但有問題。下面是代碼:Python腳本問題

import urllib, urllib2, sys 
num = sys.argv[1] 
print 'Calling' 
phones = [ 
'http://phone1/index.htm', 
'http://phone2/index.htm', 
'https://phone3/index.htm', 
'https://phone4/index.htm', 
'https://phone5/index.htm' 
] 
data = urllib.urlencode({"NUMBER":num, "DIAL":"Dial", "active_line":1}) 
while 1: 
    for phone in phones: 
     try: 
      urllib2.urlopen(phone,data) # make call 
      urllib2.urlopen(phone+"?dialeddel=0") # clear logs 
     except: pass 

的第一個問題是,它只能通過電話人叫......現在,它是建立不斷的打電話一遍又一遍,用於調試目的,我似乎只能是越來越電話從電話一...第二個問題是腳本不會終止。 ctrl + c不起作用...終止它(我知道)的唯一方法是結束ssh會話。現在,我是python的新手,所以這些都可能只是愚蠢的錯誤,所以希望有人可以幫忙。謝謝!

+6

步驟之一就是採取的是'除了:pass',看看它是否是產生任何錯誤。 – BrenBarn

+0

嘗試使用'ctrl + z'來終止。如果它沒有,你可以打開另一個ssh會話並執行'killall python' – imkost

+0

「第二個問題是腳本不會終止,ctrl + c不起作用......」你明確告訴它不要讓你控制 - C它。 'KeyboardInterrupt' - 比如通過點擊ctrl-c引發 - 也是一個例外,'except:pass'表示如果發生任何異常,請忽略它。如果你持續按住Ctrl-C足夠長的時間,你就會幸運地出現並最終破壞它。 – DSM

回答

1

嘗試更換try catch塊這樣的,

try: 
    <code> 
except Exception as exp: 
    <code> 

在使用下面的代碼。

except: 
    pass 

該系統將捕獲SystemExit,KeyboardInterrupt和其他你可能不想捕獲的東西。

謝謝。

+0

這似乎產生相同的結果。 –

+0

我已經更新了我的答案,只是檢查它。 –

0

您的try塊可能正在捕獲Ctrl-C。嘗試修改它,以便只捕獲您期望的特定異常。有關Ctrl-C的更多信息,請參閱KeyboardInterrupt作爲例外。

0

替換:

try: 
    urllib2.urlopen(phone,data) # make call 
    urllib2.urlopen(phone+"?dialeddel=0") # clear logs 
except: pass 

有:

urllib2.urlopen(phone,data) # make call 
urllib2.urlopen(phone+"?dialeddel=0") # clear logs 

所以你可以看到追蹤和查找錯誤

+0

當這樣做時,它只會調用一次並輸出呼叫...但是它顯示了這個... http://pastebin.com/vnHyHFnR –