@@ -11,15 +11,28 @@ import re
1111import os
1212import sys
1313import time
14- import commands
1514import socket
1615import curses
17- import thread
1816import locale
1917import datetime
2018import signal
2119from optparse import OptionParser
2220
21+ # Python3 doesn't have commands module anymore
22+ # Python2 already has subprocess, but Python2's
23+ # subprocess doesn't provide getoutput
24+ try :
25+ from commands import getoutput
26+ except ImportError :
27+ from subprocess import getoutput
28+
29+ # Python3 provides the lowlevel threading api
30+ # which Python2 exposed as _thread
31+ try :
32+ import thread
33+ except ImportError :
34+ import _thread as thread
35+
2336locale .setlocale (locale .LC_ALL , "en_US.UTF-8" )
2437
2538
@@ -29,10 +42,10 @@ TITLE_VERTIC_LENGTH = 4
2942
3043try :
3144 TITLE_HOSTINFO = "From: %s (%s)" % (
32- commands . getoutput ("hostname" ),
33- socket .gethostbyname (commands . getoutput ("hostname" )))
45+ getoutput ("hostname" ),
46+ socket .gethostbyname (getoutput ("hostname" )))
3447except :
35- TITLE_HOSTINFO = "From: %s" % commands . getoutput ("hostname" )
48+ TITLE_HOSTINFO = "From: %s" % getoutput ("hostname" )
3649
3750
3851ARROW = " > "
@@ -52,7 +65,7 @@ CONFIGFILE = "deadman.conf"
5265
5366SSH_CONNECT_TIMEOUT = 3
5467
55- OSNAME = commands . getoutput ("uname -s" )
68+ OSNAME = getoutput ("uname -s" )
5669
5770
5871PING_SUCCESS = 0
@@ -202,7 +215,7 @@ class Ping :
202215
203216 viacmd = ""
204217 sourcecmd = ""
205- if self .relay and self . relay . has_key ( "via" ) :
218+ if self .relay and "via" in self . relay :
206219 if self .relay ["via" ] == "snmp" :
207220 ## SNMP
208221 return self .sendSnmpPing ()
@@ -215,11 +228,11 @@ class Ping :
215228 ## SSH
216229 viacmd = ("ssh -o ConnectTimeout=%d -o StrictHostKeyChecking=no " %
217230 SSH_CONNECT_TIMEOUT )
218- if self . relay . has_key ( "key" ) :
231+ if "key" in self . relay :
219232 viacmd += "-i %s " % self .relay ["key" ]
220- if self . relay . has_key ( "user" ) :
233+ if "user" in self . relay :
221234 viacmd += "-l %s " % self .relay ["user" ]
222- if not self .relay . has_key ( "relay" ) :
235+ if "relay" not in self .relay :
223236 raise RuntimeError ("\" relay\" is not specified for %s" %
224237 self .addr )
225238 viacmd += "%s " % self .relay ["relay" ]
@@ -235,7 +248,7 @@ class Ping :
235248
236249 pingcmd = viacmd + self .pingcmdstr + sourcecmd + " %s" % self .addr
237250
238- result = commands . getoutput (pingcmd )
251+ result = getoutput (pingcmd )
239252
240253 rttm = re .search (r'time=(\d+\.\d+)' , result )
241254 if not rttm :
@@ -272,21 +285,21 @@ class Ping :
272285 return res
273286
274287 def sendSnmpPing (self ) :
275- if not self .relay . has_key ( "community" ) :
288+ if "community" not in self .relay :
276289 raise RuntimeError ("\" community\" is not specified for %s" %
277290 self .addr )
278291 community = self .relay ["community" ]
279292 community = community .replace ("\\ " , "\\ \\ " )
280293 community = community .replace ("'" , "\\ '" )
281294 snmpcmd = "snmpping -Cc1 -v 2c -c \' %s\' " % community
282- if not self .relay . has_key ( "relay" ) :
295+ if "relay" not in self .relay :
283296 raise RuntimeError ("\" relay\" is not specified for %s" %
284297 self .addr )
285298 snmpcmd += " %s " % self .relay ["relay" ]
286299
287300 pingcmd = snmpcmd + " %s" % self .addr
288301
289- result = commands . getoutput (pingcmd )
302+ result = getoutput (pingcmd )
290303
291304 rttm = re .search (r'rtt min/avg/max/stddev = (\d+)' , result )
292305
@@ -551,10 +564,7 @@ class Deadman :
551564 self .targetlist = self .gettargetlist (self .configfile )
552565
553566 for name , addr , relay , source in self .targetlist :
554- if relay .has_key ("os" ) :
555- osname = relay ['os' ]
556- else :
557- osname = OSNAME
567+ osname = relay .get ('os' , OSNAME )
558568
559569 pt = PingTarget (name , addr , osname ,
560570 relay = relay , source = source )
@@ -717,7 +727,7 @@ if __name__ == '__main__' :
717727 try :
718728 CONFIGFILE = args .pop ()
719729 except :
720- print "config file is not specified. deadman [-s scale] [-l logdir] configfile"
730+ sys . stderr . write ( "config file is not specified. deadman [-s scale] [-l logdir] configfile\n " )
721731 sys .exit ()
722732
723733 try :
0 commit comments