Ce qui peut conduire à "IOError: [Errno 9] mauvais descripteur de fichier" pendant os.system ()?

j'utilise un logiciel scientifique incluant un script Python qui appelle os.system() qui est utilisé pour exécuter un autre programme scientifique. Pendant que le sous-processus est en cours d'exécution, Python affiche à un moment donné ce qui suit:

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

je crois que ce message est imprimé en même temps que os.system() retourne.

Mes questions sont maintenant:

quelles conditions peuvent conduire à ce type d'IOError? Que veut dire exactement? Ce qui signifie pour les sous-processus qui a été invoquée par l' os.system()?

41
demandé sur Aminah Nuraini 2011-10-07 14:54:28

2 réponses

vous obtenez ce message d'erreur si un fichier Python a été fermé de "l'extérieur", c'est-à-dire pas de l'objet file close() méthode:

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

La ligne del f supprime la dernière référence à l'objet de fichier, provoquant son destructeur file.__del__ pour être appelé. L'état interne de l'objet de fichier indique que le fichier est ouvert depuis f.close() n'a jamais été appelé, afin que le destructeur essaie de fermer le fichier. L'OS lance ensuite une erreur à cause de la tentative de fermer un fichier ce n'est pas ouverte.

depuis la mise en oeuvre de os.system() ne crée aucun objet de fichier Python, il ne semble pas probable que le system() appel est à l'origine de l'erreur. Peut-être pourriez-vous montrer un peu plus de code?

36
répondu Sven Marnach 2011-10-07 11:13:40

vous pouvez obtenir cette erreur si vous utilisez le mauvais mode lors de l'ouverture du fichier. Par exemple:

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

Dans ce code, je veux lire le fichier, mais j'utilise le mode wb au lieu de r ou r+

12
répondu Aminah Nuraini 2015-11-30 18:38:45