什么可以使“`在Linux中默默地失败?

我运行这个命令:

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

将数据转储到partyapp_dump.json文件中。 但所有的数据只是打印在屏幕上,并创build一个空的partyapp_dump.json文件。

为什么会发生? 我testing了ls > partyapp_dump.json ,并且工作完美。

>你只能redirect标准输出。 尝试2>而不是redirect错误输出。 使用&>redirect两者。

您的Python应用程序必须将其输出写入STDERR输出通道,而不是正常的STDOUT。 使用shell构造>仅捕获并redirect写入输出通道的数据,但实际上还有其他几个可以打印的通道,最常见的是第二个,通常用于出错。

你可以试试陷阱STDERR(第二频道),就像这样:

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

2>&1构造将错误的输出stream连接到正常输出通道。 一个程序生成你想要在错误通道上捕获的输出是很不寻常的; 通常这会保留给debugging信息而不是应用程序数据。 谨慎使用此脚本,因为它以非标准方式运行。

您也可以将输出和错误通道转储到不同的文件,如下所示:

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

除了已经build议的stderr和stdout输出的解释之外,你的应用程序可能会简单地忽略这两个stream,并为其输出显式地打开“/ dev / tty”。

如果设置了noclobber bash选项,那么如果目标文件已经存在,>redirect将失败(尽pipe不会静默)。

为了更好的可移植性,使用cmd >| file cmd >| file强制覆盖任何现有的文件。

如果你迷路了,你总是可以试着用strace来运行它,看看有什么过程在做:

 strace -f command