#!/usr/bin/env python import sys import yaml import yaml.constructor as yamlc import json import optparse parser = optparse.OptionParser() parser.add_option('-i', '--input', metavar='FILE') parser.add_option('-o', '--output', metavar='FILE') options, args = parser.parse_args() if len(args) >= 3: parser.exit(1, 'Too many inputs!\n') if args and (options.input or options.output): parser.exit(1, "Can't specify both args and options\n") def open_file(name, mode): try: return open(name, mode, 1) except: parser.exit(2, "Could not open file %s\n" % name) if options.input: input = open_file(options.input,'r') elif len(args) >= 1: input = open_file(args[0],'r') else: input = sys.stdin if options.output: out = open_file(options.output,'w') elif len(args) == 2: out = open_file(args[1],'w') else: out = sys.stdout indent = 2 with input, out: try: value = json.load(input) yaml.safe_dump(value, out, indent=indent, default_style=None, default_flow_style=False) out.write('\n') except: import traceback traceback.print_exception(*sys.exc_info()) sys.exit(3) sys.exit(0)