我运行了以下命令:
python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json
将数据转储到partyapp_dump.json
文件中。但是,所有数据仅被打印在屏幕上,并且partyapp_dump.json
创建了一个空文件。
为什么会发生这种情况?我进行了测试ls > partyapp_dump.json
,效果很好。
我运行了以下命令:
python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json
将数据转储到partyapp_dump.json
文件中。但是,所有数据仅被打印在屏幕上,并且partyapp_dump.json
创建了一个空文件。
为什么会发生这种情况?我进行了测试ls > partyapp_dump.json
,效果很好。
Answers:
使用>只能重定向标准输出。请尝试2>来重定向错误输出。使用&>重定向两者。
您的python应用必须将其输出写入STDERR输出通道,而不是正常的STDOUT。使用shell构造>
仅捕获并重定向写入输出通道的数据,但是实际上还有其他几个通道可以打印到,最常见的是第二个通道,通常用于错误。
您可以像这样尝试捕获STDERR(第二个通道):
python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2>&1
该2>&1
构造将错误输出流连接到正常输出通道。程序生成要在错误通道上捕获的输出是不寻常的。通常将其保留给调试信息而不是应用程序数据。请谨慎使用此脚本,因为它的行为方式不规范。
您也可以像这样将输出和错误通道转储到不同的文件中:
python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2> error_output.txt
&>
仅适用于Bash 4.0和iirc最新版本的zsh。对于更便携的解决方案,foo > bar 2&>1
。参考:mywiki.wooledge.org/BashFAQ/014