23
24
def escape_arg(arg):
24
"Shell-escpae arg, if necessary"
25
"""Shell-escpae arg, if necessary.
26
Fairly simplistic, doesn't escape anything except whitespace.
27
30
return '"%s"' % arg.replace('\\', r'\\').replace('"', r'\"')
29
33
class Logger(object):
30
34
script_name = os.path.basename(sys.argv[0])
34
38
stderr = sys.stderr
41
def _print(cls, format_, message, args=None, stderr=False):
43
message = message % args
44
stream = cls.stderr if stderr else cls.stdout
45
print >> stream, format_ % (cls.script_name, message)
37
48
def command(cls, cmd):
39
print >> cls.stdout, "%s: I: %s" % (cls.script_name,
40
" ".join(escape_arg(arg)
50
cls._print("%s: I: %s", " ".join(escape_arg(arg) for arg in cmd))
44
53
def debug(cls, message, *args):
46
print >> cls.stderr, "%s: D: %s" % (cls.script_name, message % args)
55
cls._print("%s: D: %s", message, args, stderr=True)
49
58
def error(cls, message, *args):
50
print >> cls.stderr, "%s: Error: %s" % (cls.script_name, message % args)
59
cls._print("%s: Error: %s", message, args, stderr=True)
53
62
def warn(cls, message, *args):
54
print >> cls.stderr, "%s: Warning: %s" % (cls.script_name,
63
cls._print("%s: Warning: %s", message, args, stderr=True)
58
66
def info(cls, message, *args):
60
print >> cls.stdout, "%s: I: %s" % (cls.script_name, message % args)
68
cls._print("%s: I: %s", message, args)
63
71
def normal(cls, message, *args):
64
print >> cls.stdout, "%s: %s" % (cls.script_name, message % args)
72
cls._print("%s: %s", message, args)
67
75
def set_verbosity(cls, verbose):