[CRIU] [PATCH] crit: gather and parse arguments in a proper way

Ruslan Kuprieiev kupruser at gmail.com
Thu Feb 5 05:12:41 PST 2015


This will allow us to easily extend commands that crit
supports, avoiding "--help" confusion.

Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
---
 crit | 58 ++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 32 insertions(+), 26 deletions(-)

diff --git a/crit b/crit
index d1c2ab0..88f3b8e 100755
--- a/crit
+++ b/crit
@@ -5,25 +5,6 @@ import json
 
 import pycriu
 
-def handle_cmdline_opts():
-	desc = 'CRiu Image Tool'
-	parser = argparse.ArgumentParser(description=desc, formatter_class=argparse.RawTextHelpFormatter)
-	parser.add_argument('command',
-			    choices = ['decode', 'encode'],
-			help = 'decode/encode - convert criu image from/to binary type to/from json')
-	parser.add_argument('-i',
-			    '--in',
-			help = 'input file (stdin by default)')
-	parser.add_argument('-o',
-			    '--out',
-			help = 'output file (stdout by default)')
-	parser.add_argument('--pretty', help = 'Multiline with indents and some numerical fields in field-specific format',
-			action = 'store_true')
-
-	opts = vars(parser.parse_args())
-
-	return opts
-
 def inf(opts):
 	if opts['in']:
 		return open(opts['in'], 'r')
@@ -54,15 +35,40 @@ def encode(opts):
 	pycriu.images.dump(img, outf(opts))
 
 def main():
-	#Handle cmdline options
-	opts = handle_cmdline_opts()
+	desc = 'CRiu Image Tool'
+	parser = argparse.ArgumentParser(description=desc,
+			formatter_class=argparse.RawTextHelpFormatter)
 
-	cmds = {
-		'decode' : decode,
-		'encode' : encode
-	}
+	subparsers = parser.add_subparsers(help='Use crit CMD --help for command-specific help')
+
+	# Decode
+	decode_parser = subparsers.add_parser('decode',
+			help = 'convert criu image from binary type json')
+	decode_parser.add_argument('--pretty',
+			help = 'Multiline with indents and some numerical fields in field-specific format',
+			action = 'store_true')
+	decode_parser.add_argument('-i',
+			    '--in',
+			help = 'criu image in binary format to be decoded (stdin by default)')
+	decode_parser.add_argument('-o',
+			    '--out',
+			help = 'where to put criu image in json format (stdout by default)')
+	decode_parser.set_defaults(func=decode)
+
+	# Encode
+	encode_parser = subparsers.add_parser('encode',
+			help = 'convert criu image from json type to binary')
+	encode_parser.add_argument('-i',
+			    '--in',
+			help = 'criu image in json format to be encoded (stdin by default)')
+	encode_parser.add_argument('-o',
+			    '--out',
+			help = 'where to put criu image in binary format (stdout by default)')
+	encode_parser.set_defaults(func=encode)
+
+	opts = vars(parser.parse_args())
 
-	cmds[opts['command']](opts)
+	opts["func"](opts)
 
 if __name__ == '__main__':
 	main()
-- 
2.1.0



More information about the CRIU mailing list