summaryrefslogtreecommitdiffstats
path: root/Lib/json
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2014-03-22 04:17:29 (GMT)
committerBenjamin Peterson <benjamin@python.org>2014-03-22 04:17:29 (GMT)
commit940e2074123f7d18236e2e8ee08044b400261c42 (patch)
treea4fc953776d5b9a2e223b47089dfde3678dbed66 /Lib/json
parenta191b91a4373937e7545b92d875160a5f66a2f3e (diff)
downloadcpython-940e2074123f7d18236e2e8ee08044b400261c42.zip
cpython-940e2074123f7d18236e2e8ee08044b400261c42.tar.gz
cpython-940e2074123f7d18236e2e8ee08044b400261c42.tar.bz2
improve the command-line interface of json.tool (closes #21000)
A patch from Berker Peksag.
Diffstat (limited to 'Lib/json')
-rw-r--r--Lib/json/tool.py27
1 files changed, 15 insertions, 12 deletions
diff --git a/Lib/json/tool.py b/Lib/json/tool.py
index 7db4528..cd57e4f 100644
--- a/Lib/json/tool.py
+++ b/Lib/json/tool.py
@@ -10,21 +10,24 @@ Usage::
Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
"""
-import sys
+import argparse
import json
+import sys
+
def main():
- if len(sys.argv) == 1:
- infile = sys.stdin
- outfile = sys.stdout
- elif len(sys.argv) == 2:
- infile = open(sys.argv[1], 'r')
- outfile = sys.stdout
- elif len(sys.argv) == 3:
- infile = open(sys.argv[1], 'r')
- outfile = open(sys.argv[2], 'w')
- else:
- raise SystemExit(sys.argv[0] + " [infile [outfile]]")
+ prog = 'python -m json.tool'
+ description = ('A simple command line interface for json module '
+ 'to validate and pretty-print JSON objects.')
+ parser = argparse.ArgumentParser(prog=prog, description=description)
+ parser.add_argument('infile', nargs='?', type=argparse.FileType(),
+ help='a JSON file to be validated or pretty-printed')
+ parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
+ help='write the output of infile to outfile')
+ options = parser.parse_args()
+
+ infile = options.infile or sys.stdin
+ outfile = options.outfile or sys.stdout
with infile:
try:
obj = json.load(infile)