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