Wat kan leiden tot IOError: [Errno 9] Slechte bestandsdescriptor tijdens os.system()?

Ik gebruik wetenschappelijke software inclusief een Python-script dat os.system()aanroept en dat wordt gebruikt om een ​​ander wetenschappelijk programma uit te voeren. Terwijl het subproces loopt, drukt Python op een gegeven moment het volgende af:

close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor

Ik geloof dat dit bericht wordt afgedrukt op het moment dat os.system()terugkeert.

Mijn vragen zijn nu:

Welke omstandigheden kunnen leiden tot dit type IOError? Wat betekent het precies? Wat betekent het voor het subproces dat is aangeroepen door os.system()?


Antwoord 1, autoriteit 100%

Je krijgt deze foutmelding als een Python-bestand van “buitenaf” is gesloten, d.w.z. niet via de close()-methode van het bestandsobject:

>>> f = open(".bashrc")
>>> os.close(f.fileno())
>>> del f
close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor

De regel del fverwijdert de laatste verwijzing naar het bestandsobject, waardoor de destructor file.__del__wordt aangeroepen. De interne status van het bestandsobject geeft aan dat het bestand nog steeds open is omdat f.close()nooit is aangeroepen, dus de destructor probeert het bestand te sluiten. Het besturingssysteem geeft vervolgens een foutmelding vanwege de poging om een ​​bestand te sluiten dat niet open is.

Aangezien de implementatie van os.system()geen Python-bestandsobjecten aanmaakt, lijkt het niet waarschijnlijk dat de aanroep system()de oorsprong is van de fout. Misschien kun je wat meer code laten zien?


Antwoord 2, autoriteit 29%

Je kunt deze foutmelding krijgen als je de verkeerde modus gebruikt bij het openen van het bestand. Bijvoorbeeld:

   with open(output, 'wb') as output_file:
        print output_file.read()

In die code wil ik het bestand lezen, maar ik gebruik modus wbin plaats van rof r+

Other episodes