code: def block(self):
          
          if self._uses_subprocess:
              # consume stdout and stderr
              if self.blocking:
                  try:
                      stdout, stderr = self.subprocess.communicate()
                      self.__out = stdout
                      self.__err = stderr
                  except ValueError:
                      pass  # Don't read from finished subprocesses.
              else:
                  self.subprocess.stdin.close()
                  self.std_out.close()
                  self.std_err.close()
                  self.subprocess.wait()
          else:
              self.subprocess.sendeof()
              try:
                  self.subprocess.wait()
              finally:
                  if self.subprocess.proc.stdout:
                      self.subprocess.proc.stdout.close()
docs: Blocks until process is complete.