Error de direccionamiento sys.excepthook en script bash

He escrito un script de bash que está haciendo exactamente lo que quiero que haga, pero eliminando el siguiente error:

close failed in file object destructor: sys.excepthook is missing lost sys.stderr

Estoy completamente perplejo sobre cómo abordar esto. Aquí está el guión:

 #!/bin/bash usage () { echo "${0##*/} inputfile outputfile"; exit 1; } (($#==2)) || usage INPUTFILE="$1" OUTPUTFILE="$2" # All that is written between between the 'cat' command and #+ 'EOF' will be sent to the output file. cat <$OUTPUTFILE $(date "+Generated on %m/%d/%y at %H:%M:%S") DATA AUDIT: $1 ------------ COLUMN NAMES ------------ $(csvcut -n $INPUTFILE) --------------------------------------- FIRST TEN ROWS OF FIRST FIVE COLUMNS --------------------------------------- $(csvcut -c 1,2,3,4,5 $INPUTFILE | head -n 10) ------------ COLUMN STATS ------------ $(csvcut $INPUTFILE | csvstat ) ---END AUDIT EOF echo "Audited!" 

Soy bastante nuevo en shell scripts y muy nuevo en python. Apreciaría cualquier ayuda.

Estaba viendo este error al canalizar la salida de un script de Python 2.6.2 al comando head en bash en Ubuntu 9.04. try bloques try para cerrar stdout y stderr antes de salir del script:

 try: sys.stdout.close() except: pass try: sys.stderr.close() except: pass 

Ya no estoy viendo el error.

Hay dos pasos que debes realizar:

Paso 1:

En su script csvcut , busque todas las ubicaciones donde se llama a sys.stdout.write() , asegúrese de que se sys.stdout.flush() después de cada write() .

Paso 2:

Con el paso 1 completado, ahora debería poder capturar IOError dentro de la secuencia de comandos de Python. A continuación se muestra un ejemplo sobre cómo manejar tuberías rotas:

 try: function_with_sys_stdout_write_call() except IOError as e: # one example is broken pipe if e.strerror.lower() == 'broken pipe': exit(0) raise # other real IOError 

¡Espero eso ayude!

Supongo que la csvcut comandos Python csvcut es funcional pero está csvcut un error cuando intenta cerrar archivos y salir.

Si, como usted dice, la secuencia de comandos está funcionando de otra manera y suponiendo que el error ‘csvcut’ está generando salidas a stderr, entonces redirigirlo a / dev / null sería una solución temporal.

 cat <$OUTPUTFILE 2>/dev/null 

Naturalmente, cualquier otro mensaje de error en su heredoc también se redirigirá allí.