[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