diff options
author | Ruslan Kuprieiev <kupruser@gmail.com> | 2014-12-31 15:06:49 +0300 |
---|---|---|
committer | Pavel Emelyanov <xemul@parallels.com> | 2015-01-14 19:44:47 +0300 |
commit | d36994c4c32dcf22f0f4bbe08e82adbec15890bc (patch) | |
tree | cac1c341335c46c0cf8ccad79b0123f32212b20c /crit | |
parent | dfe8f838cfd8f80ab20febc80cd46726a6187156 (diff) |
crit: add crit
crit is a python script that helps user to manipulate criu
images. For now, it can only convert criu images to\from
human-readable format using pycriu.images module.
Signed-off-by: Ruslan Kuprieiev <kupruser@gmail.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Diffstat (limited to 'crit')
-rwxr-xr-x | crit | 76 |
1 files changed, 76 insertions, 0 deletions
@@ -0,0 +1,76 @@ +#!/usr/bin/env python +import argparse +import sys +import json + +import pycriu + +def handle_cmdline_opts(): + desc = 'CRiu Image Tool' + parser = argparse.ArgumentParser(description=desc) + parser.add_argument('command', + choices = ['convert'], + help = 'use \"covert\" to convert CRIU image to/from human-readable format') + 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('-f', + '--format', + choices = ['raw', 'nice'], + help = 'well-formated output (by default: raw for files and nice for stdout)') + + opts = vars(parser.parse_args()) + + return opts + +def convert_img(opts): + orig_type = None + indent = None + + # If no input file is set -- stdin is used. + if opts['in']: + with open(opts['in'], 'r') as f: + in_str = f.read() + else: + in_str = sys.stdin.read() + + # Detect what is the type we are dealing with. + if in_str[len(in_str) - len(in_str.lstrip())] == '{': + img = json.loads(in_str) + orig_type = 'json' + else: + img = pycriu.images.loads(in_str) + orig_type = 'bin' + + # For stdout --format nice is set by default. + if opts['format'] == 'nice' or (opts['format'] == None and opts['out'] == None): + indent = 4 + + # Just convert image to the opposite format + if orig_type == 'json': + out_str = pycriu.images.dumps(img) + else: + out_str = json.dumps(img, indent=indent) + + # If no output file is set -- stdout is used. + if opts['out']: + with open(opts['out'], 'w+') as f: + f.write(out_str) + else: + sys.stdout.write(out_str) + +def main(): + #Handle cmdline options + opts = handle_cmdline_opts() + + cmds = { + 'convert' : convert_img + } + + cmds[opts['command']](opts) + +if __name__ == '__main__': + main() |