A saída está no console, mas não faz parte da stdout ou stderr

2

Eu tenho um comando que gera o seguinte:

READY
Listening....
HELLO
READY
Listening....
TEST

É o reconhecimento de fala de pocketsphinx_continuous .

Eu preciso que a saída seja redirecionada para um arquivo e não pareça vir de stdout ou stderr , porque tentei adicionar 1>log.txt e 2>log.txt e toda vez que eles estão em branco.

Aqui está o kicker: quando eu adiciono 1>log.txt ao comando, não há mais saída para o console, mas log.txt ainda está em branco.

Além disso, quando adiciono | tee log.txt , não aparece no console e o arquivo ainda está em branco.

Esta saída é proveniente de stdout ? Em caso afirmativo, por que ela não está sendo redirecionada para o arquivo?

Esta questão está relacionada com a minha outra pergunta aqui: Redirect Saída de Pocketsphinx_continuous para um arquivo

Pocketsphinx é estranho e usar seus argumentos para redirecionar a saída não é possível para mim, nesta pergunta eu só quero saber onde esta saída está vindo de sdtout ou sdterr ou algum outro lugar, e como redirecionar isso saída.

EDITAR

ls -l /proc/PID/fd/ retorna:

lrwx------ 1 pi pi 64 Jan  4 04:12 0 -> /dev/pts/2
lrwx------ 1 pi pi 64 Jan  4 04:12 1 -> /dev/pts/2
lrwx------ 1 pi pi 64 Jan  4 04:11 2 -> /dev/pts/2
lrwx------ 1 pi pi 64 Jan  4 04:12 4 -> /dev/snd/pcmC0D0c
    
por Patrick Cook 04.01.2016 / 05:24

2 respostas

2

O comando horrível:

script -q -f -c "pocketsphinx_continuous -samprate 48000 -nfft 2048 -hmm /usr/local/share/pocketsphinx/model/en-us/en-us -lm 9745.lm -dict 9745.dic -inmic yes -logfn /dev/null" words.txt &

funciona para mim, registra:

READY....
Listening...
HELLO

para o arquivo, e é fácil eliminar as coisas indesejadas.

EDITAR: Se alguém estiver fazendo isso no futuro, remova o & no final desse comando se você estiver executando-o em um console, se estiver executando-o via Python ou outro idioma, mantenha o & no final.

    
por 04.01.2016 / 12:06
1

As páginas do manual do linux dizem

the standard input and output streams are fully buffered if and only if the streams do not refer to an interactive device.

Então você pode precisar gerar muita saída (4096 bytes) antes que algo apareça na saída.

Se houver um modo regular de parar o pocketsphinx, e se ele for implementado corretamente, ele deverá liberar os buffers no arquivo de saída quando você o parar. Isso pelo menos provaria a teoria do buffering, mas é claro que isso não o ajudaria a obter a saída a tempo.

Esta resposta ou outras para a respectiva pergunta pode ajudar.

    
por 04.01.2016 / 10:08