¿Qué puede llevar a “IOError: Descriptor de archivo incorrecto” durante os.system ()?

Estoy usando un software científico que incluye un script de Python que llama os.system() que se utiliza para ejecutar otro progtwig científico. Mientras se está ejecutando el subproceso, Python en algún punto imprime lo siguiente:

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

Creo que este mensaje se imprime al mismo tiempo que os.system() .

Mis preguntas ahora son:

¿Qué condiciones pueden llevar a este tipo de IOError? ¿Qué significa exactamente? ¿Qué significa para el subproceso que ha sido invocado por os.system() ?

Recibirá este mensaje de error si un archivo Python se cerró desde “el exterior”, es decir, no desde el método close() del objeto de archivo:

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

La línea del f elimina la última referencia al objeto de archivo, lo que hace file.__del__ a su file.__del__ destructor file.__del__ . El estado interno del objeto de archivo indica que el archivo sigue abierto ya que nunca se llamó a f.close() , por lo que el destructor intenta cerrar el archivo. El sistema operativo posteriormente lanza un error debido al bash de cerrar un archivo que no está abierto.

Dado que la implementación de os.system() no crea ningún objeto de archivo Python, no parece probable que la llamada a system() sea ​​el origen del error. Tal vez usted podría mostrar un poco más de código?

Puede obtener este error si utiliza el modo incorrecto al abrir el archivo. Por ejemplo:

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

En ese código, quiero leer el archivo, pero uso el modo wb lugar de r o r+