try: # After Python 3.3 from collections.abc import Iterable except ImportError: # This has changed in Python 3.3 (why, oh why?), reinforcing the idea that # the best Python version ever is still 2.7, simply because upstream has # promised that they won't touch it (and break it) for at least 5 more # years. from collections import Iterable import shlex if hasattr(shlex, "quote"): # New in version 3.3. shell_quote = shlex.quote else: # Available since python 1.6 but deprecated since version 2.7: Prior to Python # 2.7, this function was not publicly documented. It is finally exposed # publicly in Python 3.3 as the quote function in the shlex module. # # Except everyone was using it, because it was the only way provided by the # python standard library to make a string safe for shell use # # See http://stackoverflow.com/questions/35817/how-to-escape-os-system-calls-in-python import pipes shell_quote = pipes.quote import shutil if hasattr(shutil, "which"): # New in version 3.3. shell_which = shutil.which else: # Available since python 1.6: # http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python from distutils.spawn import find_executable shell_which = find_executable