Правильный способ закрыть все файлы после подпроцесса Popen и общаться
У нас возникли некоторые проблемы из-за страшного «слишком большого количества открытых файлов» на нашей машине с Ubuntu Linux, работающей с приложением Python Twisted. Во многих местах нашей программы мы используем подпроцесс Popen, что-то вроде этого:
Popen('ifconfig ' + iface, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
output = process.stdout.read()
в то время как в других местах мы используем подпроцесс связи:
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)
Что именно мне нужно сделать в обоих случаях, чтобы закрыть дескрипторы открытых файлов? Документация Python по этому вопросу не ясна. Исходя из того, что я понял (что может быть неправильно), как connect (), так и wait () действительно очистят любые открытые fds самостоятельно. Но как насчет Попена? Нужно ли закрывать stdin, stdout и stderr явным образом после вызова Popen, если я не звоню общаться или ждать?