Maneira correta de fechar todos os arquivos após o subprocesso do Popen e se comunicar

Estamos tendo alguns problemas com os temidos "muitos arquivos abertos" em nossa máquina Ubuntu Linux executando um aplicativo Twisted python. Em muitos lugares do nosso programa, estamos usando o subprocesso Popen, algo como isto:

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

enquanto em outros lugares usamos subprocesso de comunicação:

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)

O que exatamente eu preciso fazer nos dois casos para fechar qualquer descritor de arquivo aberto? A documentação do Python não está clara sobre isso. Pelo que entendi (o que poderia estar errado), comunicar () e esperar () realmente limparão todos os fds abertos por conta própria. Mas e o Popen? Preciso fechar stdin, stdout e stderr explicitamente depois de ligar para o Popen se eu não ligar para comunicar ou esperar?

questionAnswers(2)

yourAnswerToTheQuestion