Я использую подпроцесс для вызова другой программы и сохранения возвращаемых значений переменной. Этот процесс повторяется в цикле, и через несколько тысяч раз программа разбился со следующей ошибкой:Подпроцесс Python: слишком много открытых файлов
Traceback (most recent call last):
File "./extract_pcgls.py", line 96, in <module>
SelfE.append(CalSelfEnergy(i))
File "./extract_pcgls.py", line 59, in CalSelfEnergy
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
File "/usr/lib/python3.2/subprocess.py", line 745, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.2/subprocess.py", line 1166, in _execute_child
errpipe_read, errpipe_write = _create_pipe()
OSError: [Errno 24] Too many open files
Любая идея, как решить эту проблему очень ценится!
Код поставляется из комментариев:
cmd = "enerCHARMM.pl -parram=x,xtop=topology_modified.rtf,xpar=lipid27_modified.par,nobuildall -out vdwaals {0}".format(cmtup[1])
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()
Общайтесь() закрывает трубу, так что это не ваша проблема. В конце концов, Popen() - это просто команда, которая выполняется, когда вы заканчиваете работу с трубами ... проблема может быть в другом месте вашего кода, при этом остальные файлы остаются открытыми. Я заметил «SelfE.append» ... вы открываете другие файлы и сохраняете их в списке? – tdelaney