Forma correcta de cerrar todos los archivos después del subproceso Popen y comunicarse

Estamos teniendo algunos problemas con los temidos "demasiados archivos abiertos" en nuestra máquina Ubuntu Linux ejecutando una aplicación Python Twisted. En muchos lugares de nuestro programa, estamos utilizando el subproceso de Popen, algo como esto:

Popen('ifconfig ' + iface, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
output = process.stdout.read()

mientras que en otros lugares usamos el subproceso de comunicación:

process = subprocess.Popen(['/usr/bin/env', 'python', self._get_script_path(script_name)],
                       stdin=subprocess.PIPE,
                       stdout=subprocess.PIPE,
                       close_fds=True)
out, err = process.communicate(data)

¿Qué debo hacer exactamente en ambos casos para cerrar los descriptores de archivos abiertos? La documentación de Python no es clara al respecto. Por lo que deduzco (lo que podría estar mal), ambos se comunican () y esperan () de hecho limpiarán los archivos abiertos por su cuenta. ¿Pero qué hay de Popen? ¿Necesito cerrar stdin, stdout y stderr explícitamente después de llamar a Popen si no llamo comunicar o esperar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta