J'ai exécuté cette commande:
python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json
Pour vider les données dans le partyapp_dump.json
fichier. Mais toutes les données sont simplement imprimées à l'écran et un partyapp_dump.json
fichier vide est créé.
Pourquoi cela pourrait-il arriver? J'ai testé ls > partyapp_dump.json
et cela a parfaitement fonctionné.
&>
ne fonctionnera que dans Bash 4.0 et iirc versions récentes de zsh. Pour une solution plus portable,foo > bar 2&>1
. Référence: mywiki.wooledge.org/BashFAQ/014Votre application python doit écrire sa sortie sur le canal de sortie STDERR au lieu du STDOUT normal. L'utilisation de la construction shell
>
n'attrape et ne redirige que les données écrites sur le canal de sortie, mais il existe en fait plusieurs autres canaux qui peuvent être imprimés, le plus courant étant le second, généralement utilisé pour les erreurs.Vous pouvez essayer de piéger STDERR (2ème canal) ainsi:
La
2>&1
construction connecte le flux de sortie pour les erreurs au canal de sortie normal. Il est inhabituel qu'un programme génère une sortie que vous souhaitez capturer sur le canal d'erreur; généralement, ces informations sont réservées aux informations de débogage et non aux données d'application. Veuillez utiliser ce script avec une certaine prudence car il se comporte de manière non standard.Vous pouvez également vider les canaux de sortie et d'erreur dans différents fichiers comme celui-ci:
la source
En plus de l'explication de sortie stderr vs stdout déjà suggérée, votre application peut simplement ignorer ces deux flux et ouvrir explicitement "/ dev / tty" pour sa sortie.
la source
Si l'
noclobber
option bash est définie, la redirection échouera (mais pas en silence) si le fichier de destination existe déjà.Pour une meilleure portabilité, utilisez
cmd >| file
pour forcer l'écrasement de tout fichier existant.la source
Si vous êtes perdu, vous pouvez toujours essayer de l'exécuter avec strace pour voir ce que font les processus:
la source
strace
.