Eu executei este comando:
python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json
Para despejar dados no partyapp_dump.json
arquivo. Mas todos os dados são impressos na tela e um partyapp_dump.json
arquivo vazio é criado.
Por que isso pôde acontecer? Eu testei ls > partyapp_dump.json
e isso funcionou perfeitamente.
&>
funcionará apenas no Bash 4.0 e nas versões recentes do zsh do iirc. Para uma solução mais portátilfoo > bar 2&>1
,. Referência: mywiki.wooledge.org/BashFAQ/014Seu aplicativo python deve estar gravando sua saída no canal de saída STDERR em vez do STDOUT normal. O uso da construção shell
>
captura e redireciona apenas os dados gravados no canal de saída, mas na verdade existem vários outros canais que podem ser impressos, sendo o mais comum o segundo, geralmente usado para erros.Você pode tentar capturar o STDERR (segundo canal) da seguinte maneira:
A
2>&1
construção conecta o fluxo de saída para erros ao canal de saída normal. É incomum um programa gerar saída que você deseja capturar no canal de erro; geralmente isso seria reservado para informações de depuração, não dados de aplicativos. Por favor, use este script com algum cuidado, pois ele está se comportando de maneira não-padrão.Você também pode despejar os canais de saída e erro em arquivos diferentes como este:
fonte
Além da explicação já sugerida da saída stderr vs stdout, seu aplicativo pode simplesmente ignorar esses dois fluxos e abrir explicitamente "/ dev / tty" para sua saída.
fonte
Se a
noclobber
opção bash estiver definida, o redirecionamento falhará (embora não silenciosamente) se o arquivo de destino já existir.Para uma melhor portabilidade, use
cmd >| file
para forçar a substituição de qualquer arquivo existente.fonte
Se você estiver perdido, sempre poderá tentar executá-lo com strace para ver o que os processos estão fazendo:
fonte
strace
.