code: def pipe(*args):
      
      if len(args) < 2:
          raise ValueError("pipe needs at least 2 processes")
  
      # Set stdout=PIPE in every subprocess except the last
      for i in args[:-1]:
          i["stdout"] = subprocess.PIPE
  
      # Runs all subprocesses connecting stdins and stdouts to create the
      # pipeline. Closes stdouts to avoid deadlocks.
      popens = [popen_sp(**args[0])]
      for i in range(1, len(args)):
          args[i]["stdin"] = popens[i - 1].stdout
          popens.append(popen_sp(**args[i]))
          popens[i - 1].stdout.close()
  
      # Returns the array of subprocesses just created
      return popens
docs: Takes as parameters several dicts, each with the same
      parameters passed to popen.
  
      Runs the various processes in a pipeline, connecting
      the stdout of every process except the last with the
      stdin of the next process.
  
      Adapted from http://www.enricozini.org/2009/debian/python-pipes/