web-dev-qa-db-fra.com

Que peut conduire à "IOError: [Errno 9] Descripteur de fichier incorrect" pendant os.system ()?

J'utilise un logiciel scientifique comprenant un script Python qui appelle os.system()] qui est utilisé pour exécuter un autre programme scientifique. Lorsque le sous-processus est en cours d'exécution, Python à un moment donné imprime 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() renvoie.

Mes questions sont maintenant:

Quelles conditions peuvent conduire à ce type d'IOError? Qu'est-ce que cela signifie exactement? Qu'est-ce que cela signifie pour le sous-processus qui a été appelé par os.system()?

49

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

>>> 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 fichier, ce qui entraîne l'appel de son destructeur file.__del__. L'état interne de l'objet fichier indique que le fichier est toujours ouvert, étant donné que f.close() n'a jamais été appelé. Le destructeur tente donc de fermer le fichier. Le système d'exploitation génère ensuite une erreur en raison de la tentative de fermeture d'un fichier qui n'est pas ouvert.

Puisque l'implémentation de os.system() ne crée aucun objet de fichier Python), il ne semble pas probable que l'appel system() soit l'origine de l'erreur. Peut-être que vous pourriez montrer un peu plus de code?

43
Sven Marnach

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+

14
Aminah Nuraini