Ich benutze Subprozess, um ein anderes Programm aufzurufen und seine Rückgabewerte in einer Variablen zu speichern. Dieser Prozess wird in einer Schleife wiederholt, und nach ein paar tausend Mal das Programm abgestürzt ist mit dem folgenden Fehler:Python-Subprozess: Zu viele geöffnete Dateien
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
Jede Idee, wie dieses Problem zu lösen, ist sehr zu schätzen!
-Code von Kommentaren geliefert:
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() schließt die Pipe, das ist also nicht dein Problem. Am Ende ist Popen() nur der Befehl, der ausgeführt wird, wenn Sie keine Pipes mehr haben ... das Problem könnte anderswo in Ihrem Code sein, wenn andere Dateien offen bleiben. Ich habe "SelfE.append" bemerkt ... öffnest du andere Dateien und führst sie in einer Liste auf? – tdelaney