[systemd-devel] [PATCH] systemd-analyze: switch to python getopt for argument parsing
Lennart Poettering
lennart at poettering.net
Mon May 21 16:35:26 PDT 2012
On Sun, 20.05.12 17:01, shawn (shawnlandden at gmail.com) wrote:
Thanks! Applied
>
> On Mon, 2012-05-14 at 15:29 -0700, Patrick McCarty wrote:
> > On Mon, May 14, 2012 at 03:03:34PM -0700, shawn wrote:
> > > avoid excessive indentation
> >
> > > From aa8f24d4f00ceaa8f1624c64880a62718142660f Mon Sep 17 00:00:00 2001
> > > From: Shawn Landden <shawnlandden at gmail.com>
> > > Date: Thu, 3 May 2012 16:41:40 -0700
> > > Subject: [PATCH] systemd-analyze: switch to python getopt for argument
> > > parsing
> > >
> > > this uses gnu style getopt, so you can put the opts at the end: (e.g.)
> > > systemd-analyze blame --user
> > >
> > > v4
> > > ---
> > > src/analyze/systemd-analyze | 65 ++++++++++++++++++++++++++++++-------------
> > > 1 file changed, 46 insertions(+), 19 deletions(-)
> >
> > This patch looks good to me.
> >
> > Thanks!
> >
> > -Patrick
>
>
> >From aa8f24d4f00ceaa8f1624c64880a62718142660f Mon Sep 17 00:00:00 2001
> From: Shawn Landden <shawnlandden at gmail.com>
> Date: Thu, 3 May 2012 16:41:40 -0700
> Subject: [PATCH] systemd-analyze: switch to python getopt for argument
> parsing
>
> this uses gnu style getopt, so you can put the opts at the end: (e.g.)
> systemd-analyze blame --user
>
> v4
> ---
> src/analyze/systemd-analyze | 65 ++++++++++++++++++++++++++++++-------------
> 1 file changed, 46 insertions(+), 19 deletions(-)
>
> diff --git a/src/analyze/systemd-analyze b/src/analyze/systemd-analyze
> index ad7bd9a..5d451c3 100755
> --- a/src/analyze/systemd-analyze
> +++ b/src/analyze/systemd-analyze
> @@ -1,6 +1,10 @@
> #!/usr/bin/python
>
> -import dbus, sys
> +import getopt, dbus, sys, os
> +try:
> + import cairo
> +except ImportError:
> + cairo = None
>
> def acquire_time_data():
>
> @@ -68,7 +72,7 @@ def draw_text(context, x, y, text, size = 12, r = 0, g = 0, b = 0, vcenter = 0.5
>
> context.restore()
>
> -def help():
> +def usage():
> sys.stdout.write("""systemd-analyze [--user] time
> systemd-analyze [--user] blame
> systemd-analyze [--user] plot
> @@ -78,16 +82,11 @@ Process systemd profiling information
> -h --help Show this help
> """)
>
> +def help():
> + usage()
> + sys.exit()
>
> -bus = dbus.SystemBus()
> -command_index = 1
> -
> -if len(sys.argv) > 1 and sys.argv[1] == '--user':
> - bus = dbus.SessionBus()
> - command_index = 2
> -
> -
> -if len(sys.argv) <= command_index or sys.argv[command_index] == 'time':
> +def time():
>
> initrd_time, start_time, finish_time = acquire_start_time()
>
> @@ -104,7 +103,7 @@ if len(sys.argv) <= command_index or sys.argv[command_index] == 'time':
> finish_time/1000)
>
>
> -elif sys.argv[command_index] == 'blame':
> +def blame():
>
> data = acquire_time_data()
> s = sorted(data, key = lambda i: i[2] - i[1], reverse = True)
> @@ -119,9 +118,10 @@ elif sys.argv[command_index] == 'blame':
>
> sys.stdout.write("%6lums %s\n" % ((aet - ixt) / 1000, name))
>
> -elif sys.argv[command_index] == 'plot':
> - import cairo, os
> -
> +def plot():
> + if cairo is None:
> + sys.stderr.write("Failed to initilize python-cairo required for 'plot' verb.\n")
> + sys.exit(1)
> initrd_time, start_time, finish_time = acquire_start_time()
> data = acquire_time_data()
> s = sorted(data, key = lambda i: i[1])
> @@ -275,8 +275,35 @@ elif sys.argv[command_index] == 'plot':
> finish_time/1000), hcenter = 0, vcenter = -1)
>
> surface.finish()
> -elif sys.argv[command_index] in ("help", "--help", "-h"):
> - help()
> -else:
> - sys.stderr.write("Unknown verb '%s'.\n" % sys.argv[command_index])
> +
> +def unknown_verb():
> + sys.stderr.write("Unknown verb '%s'.\n" % args[0])
> + usage()
> sys.exit(1)
> +
> +bus = dbus.SystemBus()
> +
> +try:
> + opts, args = getopt.gnu_getopt(sys.argv[1:], "h", ["help", "user"])
> +except getopt.GetoptError, err:
> + print str(err)
> + usage()
> + sys.exit(2)
> +for o, a in opts:
> + if o in ("-h", "--help"):
> + help()
> + elif o == '--user':
> + bus = dbus.SessionBus()
> + else:
> + assert False, "unhandled option"
> +
> +verb = {'time' : time,
> + 'blame': blame,
> + 'plot' : plot,
> + 'help' : help,
> + }
> +
> +if len(args) == 0:
> + time()
> +else:
> + verb.get(args[0], unknown_verb)()
Lennart
--
Lennart Poettering - Red Hat, Inc.
More information about the systemd-devel
mailing list