Stack: Replace getopt with argparse
Modernize and make it easier to add new options.
Test: m
Test: manual
Change-Id: Ib7b1de4626e6b2cd27dca1dd911c594db93cb292
diff --git a/scripts/stack b/scripts/stack
index 8e65dba..3c447b7 100755
--- a/scripts/stack
+++ b/scripts/stack
@@ -16,55 +16,33 @@
"""stack symbolizes native crash dumps."""
-import getopt
+import argparse
import sys
import stack_core
import symbol
-
-def PrintUsage():
- """Print usage and exit with error."""
- # pylint: disable-msg=C6310
- print
- print " usage: " + sys.argv[0] + " [options] [FILE]"
- print
- print " --arch=arm|arm64|mips|mips64|x86|x86_64"
- print " the target architecture"
- print
- print " FILE should contain a stack trace in it somewhere"
- print " the tool will find that and re-print it with"
- print " source files and line numbers. If you don't"
- print " pass FILE, or if file is -, it reads from"
- print " stdin."
- print
- # pylint: enable-msg=C6310
- sys.exit(1)
-
-
def main():
- try:
- options, arguments = getopt.getopt(sys.argv[1:], "",
- ["arch=",
- "help"])
- except getopt.GetoptError, unused_error:
- PrintUsage()
+ parser = argparse.ArgumentParser(description='Parse and symbolize crashes')
+ parser.add_argument('--arch', help='the target architecture')
+ parser.add_argument('file',
+ metavar='FILE',
+ default='-',
+ help='should contain a stack trace in it somewhere the '
+ 'tool will find that and re-print it with source '
+ 'files and line numbers. If you don\'t pass FILE, '
+ 'or if file is -, it reads from stdin.')
- for option, value in options:
- if option == "--help":
- PrintUsage()
- elif option == "--arch":
- symbol.ARCH = value
+ args = parser.parse_args()
- if len(arguments) > 1:
- PrintUsage()
-
- if not arguments or arguments[0] == "-":
+ if args.arch:
+ symbol.ARCH = args.arch
+ if args.file == '-':
print "Reading native crash info from stdin"
f = sys.stdin
else:
- print "Searching for native crashes in %s" % arguments[0]
- f = open(arguments[0], "r")
+ print "Searching for native crashes in %s" % args.file
+ f = open(args.file, "r")
lines = f.readlines()
f.close()