[systemd-devel] [PATCH] systemd-analyze: switch to python getopt for argument parsing

shawn shawnlandden at gmail.com
Wed May 9 01:39:07 PDT 2012


Any comments on this patch?

getopt.getopt would be the other style of parameters, where options must
be first, but the other systemd tools seems to allow the GNU style

On Thu, 2012-05-03 at 20:13 -0700, Shawn Landden wrote:
> this uses gnu style getopt, so you can put the opts at the end: (e.g.)
> systemd-analyze blame --user
> 
> v2
> ---
>  src/analyze/systemd-analyze |   56 ++++++++++++++++++++++++++++++-------------
>  1 file changed, 39 insertions(+), 17 deletions(-)
> 
> diff --git a/src/analyze/systemd-analyze b/src/analyze/systemd-analyze
> index ad7bd9a..48d30ce 100755
> --- a/src/analyze/systemd-analyze
> +++ b/src/analyze/systemd-analyze
> @@ -1,6 +1,6 @@
>  #!/usr/bin/python
>  
> -import dbus, sys
> +import getopt, dbus, sys
>  
>  def acquire_time_data():
>  
> @@ -68,7 +68,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 +78,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 +99,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,7 +114,7 @@ elif sys.argv[command_index] == 'blame':
>  
>                  sys.stdout.write("%6lums %s\n" % ((aet - ixt) / 1000, name))
>  
> -elif sys.argv[command_index] == 'plot':
> +def plot():
>          import cairo, os
>  
>          initrd_time, start_time, finish_time = acquire_start_time()
> @@ -275,8 +270,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)()

-- 
-Shawn Landden




More information about the systemd-devel mailing list