Sto utilizzando un sottoprocesso per chiamare un altro programma e salvare i suoi valori di ritorno su una variabile. Questo processo viene ripetuto in un ciclo, e dopo un paio di migliaia di volte il programma si è schiantato con il seguente errore:Sottoprocesso Python: troppi file aperti
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
Qualsiasi idea di come risolvere questo problema è molto apprezzato!
codice fornito da commenti:
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()
Communicate() chiude la pipe, quindi non è un problema. Alla fine, Popen() è solo il comando che viene eseguito quando si esauriscono le pipe ... il problema potrebbe essere altrove nel codice con altri file lasciati aperti. Ho notato "SelfE.append" ... stai aprendo altri file e li stai tenendo in una lista? – tdelaney