diff -r 82607e7c24c7 Lib/test/test_bz2.py --- a/Lib/test/test_bz2.py Fri Nov 11 12:07:48 2016 +0200 +++ b/Lib/test/test_bz2.py Fri Nov 11 12:38:25 2016 +0200 @@ -8,6 +8,7 @@ import pickle import glob import pathlib import random +import shutil import subprocess import sys from test.support import unlink @@ -22,6 +23,7 @@ except ImportError: bz2 = support.import_module('bz2') from bz2 import BZ2File, BZ2Compressor, BZ2Decompressor +has_cmdline_bunzip2 = None class BaseTest(unittest.TestCase): "Base for other testcases." @@ -74,23 +76,15 @@ class BaseTest(unittest.TestCase): if os.path.isfile(self.filename): os.unlink(self.filename) - if sys.platform == "win32": - # bunzip2 isn't available to run on Windows. - def decompress(self, data): + @staticmethod + def decompress(data): + global has_cmdline_bunzip2 + if has_cmdline_bunzip2 is None: + has_cmdline_bunzip2 = bool(shutil.which('bunzip2')) + if has_cmdline_bunzip2: + return subprocess.check_output(['bunzip2'], input=data) + else: return bz2.decompress(data) - else: - def decompress(self, data): - pop = subprocess.Popen("bunzip2", shell=True, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - pop.stdin.write(data) - pop.stdin.close() - ret = pop.stdout.read() - pop.stdout.close() - if pop.wait() != 0: - ret = bz2.decompress(data) - return ret class BZ2FileTest(BaseTest):