Pergunta

Eu estou fazendo um script que lida com um conjunto predefinido de dados, a saída para um arquivo. Quero aparecer um aviso quando um datum (que é sempre "Regular" em cada set que eu tive acesso a) é diferente afirmando que este valor não for tratada (desde que eu não sei como isso afeta os dados). Devo saída este aviso para stderr ou stdout?

Foi útil?

Solução

Se eu salvou a saída desse script (ou seja stdout apenas) para que eu pudesse processá-lo mais tarde, se esse aviso interferir com a forma como a saída é analisado? Além disso, se a saída é canalizada para outro processo, o aviso deve aparecer no terminal, de modo que o usuário vê-lo imediatamente.

Por essas razões, em geral, você saída avisos para stderr.

Outras dicas

O aviso deve ir para stderr.

Além dos pontos apresentados por outros (que causam erros de análise de processos a jusante e escondendo o erro do usuário no console), não é uma questão de flexibilidade.

Se o usuário não quiser que o aviso de stderr para ir para um processo a jusante que está analisando stdout, eles não têm que fazer nada especial.

your_script | downstream_process

Se o usuário quer o aviso de stderr para ir para um processo a jusante que irá analisar stdout e stderr, o usuário pode usar 2> & 1 para redirecionar stderr para stdout.

your_script 2>&1 | downstream_process

Se você saída ambos os avisos e quaisquer dados normais para stdout, o usuário não tem uma boa maneira de separar os avisos a partir dos dados sem analisar tudo. Assim, o envio de avisos para stderr dá seu script mais flexibilidade também.

A verdadeira questão é: se alguém redirecionar a saída do seu script em um arquivo, você iria querer o aviso colocado no arquivo, ou dirigida para o usuário

?

Se você está esperando o usuário a tomar algumas medidas, como resultado do aviso, ele deve ir para STDERR. Se algum script jusante é susceptível de ser desarmado pelo aviso, ele deve ir para STDERR.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top