2012-09-01 86 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 –