20 votos

¿Qué podría hacer `>` silenciosamente fallar en Linux?

Me encontré este comando:

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json

Para el volcado de datos en la partyapp_dump.json archivo. Pero todos los datos que se imprime en la pantalla y una vacía partyapp_dump.json archivo es creado.

¿Por qué pudo suceder esto? He probado ls > partyapp_dump.json y que funcionó a la perfección.

40voto

fab Puntos 838

Con > sólo redirigir la salida estándar. Intente 2> en lugar de redirigir la salida de error. El uso de &> para redirigir tanto.

22voto

Caleb Puntos 7556

Su python aplicación debe ser escrito de su salida a la STDERR canal de salida en lugar de la normal de STDOUT. Usando el shell de la construcción > sólo las capturas y redirige los datos escritos en el canal de salida, pero en realidad hay varios canales que se pueden imprimir, siendo los más comunes el segundo, por lo general utilizado por los errores.

Usted puede tratar de reventado STDERR (2º canal) así como esto:

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2>&1

El 2>&1 construir conecta el flujo de salida de errores a la normalidad canal de salida. Es inusual que un programa para generar la salida que se desea capturar en el error de canal, que por lo general se reserva para depurar la información, no datos de la aplicación. Por favor, utilice este script con cierta cautela, ya que se está comportando de una manera no estándar.

Usted también podría volcar la salida y el error canales a diferentes archivos como este:

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2> error_output.txt

5voto

jlliagre Puntos 6247

En adición a la ya sugerida stderr vs stdout salida de explicación, su aplicación puede simplemente ignorar tanto de estos flujos y explícitamente abierta "/dev/tty" para su salida.

1voto

tylerl Puntos 8195

Si el noclobber bash se establece la opción, a continuación, > redirección de fallará (aunque no en silencio) si el archivo de destino ya existe.

Para una mejor portabilidad, uso cmd >| file a la fuerza sobrescribir cualquier archivo existente.

0voto

jon jong Puntos 1

Si usted está perdido siempre puedes probar a ejecutarlo con strace para ver qué procesos están haciendo:

strace -f command

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: