[Python-checkins] [3.8] bpo-39828: Fix json.tool to catch BrokenPipeError (GH-18779). (GH-18894)
Dong-hee Na
webhook-mailer at python.org
Tue Mar 10 04:14:12 EDT 2020
https://github.com/python/cpython/commit/caec8a0dfbed04bdb8567782fdff7537529d2232
commit: caec8a0dfbed04bdb8567782fdff7537529d2232
branch: 3.8
author: Dong-hee Na <donghee.na92 at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-03-10T01:14:08-07:00
summary:
[3.8] bpo-39828: Fix json.tool to catch BrokenPipeError (GH-18779). (GH-18894)
(cherry picked from commit 700cb587303461d5a96456c56902cfdd8ad50e2d)
Co-authored-by: Dong-hee Na <donghee.na92 at gmail.com>
Automerge-Triggered-By: @vstinner
files:
A Misc/NEWS.d/next/Library/2020-03-05-00-57-49.bpo-39828.yWq9NJ.rst
M Lib/json/tool.py
M Lib/test/test_json/test_tool.py
diff --git a/Lib/json/tool.py b/Lib/json/tool.py
index 8db9ea40ad1b0..c42138a05c05e 100644
--- a/Lib/json/tool.py
+++ b/Lib/json/tool.py
@@ -52,4 +52,7 @@ def main():
if __name__ == '__main__':
- main()
+ try:
+ main()
+ except BrokenPipeError as exc:
+ sys.exit(exc.errno)
diff --git a/Lib/test/test_json/test_tool.py b/Lib/test/test_json/test_tool.py
index f362f1b13a253..a62a5d4084a23 100644
--- a/Lib/test/test_json/test_tool.py
+++ b/Lib/test/test_json/test_tool.py
@@ -1,7 +1,9 @@
+import errno
import os
import sys
import textwrap
import unittest
+
from subprocess import Popen, PIPE
from test import support
from test.support.script_helper import assert_python_ok
@@ -149,3 +151,12 @@ def test_sort_keys_flag(self):
self.assertEqual(out.splitlines(),
self.expect_without_sort_keys.encode().splitlines())
self.assertEqual(err, b'')
+
+ @unittest.skipIf(sys.platform =="win32", "The test is failed with ValueError on Windows")
+ def test_broken_pipe_error(self):
+ cmd = [sys.executable, '-m', 'json.tool']
+ proc = Popen(cmd, stdout=PIPE, stdin=PIPE)
+ # bpo-39828: Closing before json.tool attempts to write into stdout.
+ proc.stdout.close()
+ proc.communicate(b'"{}"')
+ self.assertEqual(proc.returncode, errno.EPIPE)
diff --git a/Misc/NEWS.d/next/Library/2020-03-05-00-57-49.bpo-39828.yWq9NJ.rst b/Misc/NEWS.d/next/Library/2020-03-05-00-57-49.bpo-39828.yWq9NJ.rst
new file mode 100644
index 0000000000000..04c61b94c45d6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-03-05-00-57-49.bpo-39828.yWq9NJ.rst
@@ -0,0 +1 @@
+Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by Dong-hee Na.
More information about the Python-checkins
mailing list