Skip to content

Commit c4d8ad6

Browse files
authored
Merge pull request #13 from cfra/feature/python3
make deadman compatible with python3
2 parents 0484690 + 515f434 commit c4d8ad6

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

deadman

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,28 @@ import re
1111
import os
1212
import sys
1313
import time
14-
import commands
1514
import socket
1615
import curses
17-
import thread
1816
import locale
1917
import datetime
2018
import signal
2119
from 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+
2336
locale.setlocale(locale.LC_ALL, "en_US.UTF-8")
2437

2538

@@ -29,10 +42,10 @@ TITLE_VERTIC_LENGTH = 4
2942

3043
try :
3144
TITLE_HOSTINFO = "From: %s (%s)" % (
32-
commands.getoutput ("hostname"),
33-
socket.gethostbyname (commands.getoutput ("hostname")))
45+
getoutput ("hostname"),
46+
socket.gethostbyname (getoutput ("hostname")))
3447
except :
35-
TITLE_HOSTINFO = "From: %s" % commands.getoutput ("hostname")
48+
TITLE_HOSTINFO = "From: %s" % getoutput ("hostname")
3649

3750

3851
ARROW = " > "
@@ -52,7 +65,7 @@ CONFIGFILE = "deadman.conf"
5265

5366
SSH_CONNECT_TIMEOUT = 3
5467

55-
OSNAME = commands.getoutput ("uname -s")
68+
OSNAME = getoutput ("uname -s")
5669

5770

5871
PING_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

Comments
 (0)