출력은 콘솔에 있지만 stdout 또는 stderr의 일부는 아닙니다.

출력은 콘솔에 있지만 stdout 또는 stderr의 일부는 아닙니다.

다음을 출력하는 명령이 있습니다.

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

이는 음성 인식에서 비롯됩니다 pocketsphinx_continuous.

출력을 파일로 리디렉션해야 하는데 파일 이 비어 있거나 추가하려고 시도했기 때문에 파일 stdout이 나오지 않는 것 같습니다 .stderr1>log.txt2>log.txt

이것이 핵심입니다:1>log.txt명령에 추가하면 콘솔에 더 이상 출력이 없지만 log.txt여전히 비어 있습니다.

| tee log.txt게다가 추가 할 때도확실히콘솔에 표시된 파일은 여전히 ​​비어 있습니다.

이 출력은 에서 나오나요 stdout? 그렇다면 파일로 리디렉션되지 않는 이유는 무엇입니까?

이 질문은 내 또 다른 질문과 관련이 있습니다.Pocketsphinx_continuous의 출력을 파일로 리디렉션

sdtoutPocketsphinx는 이상합니다. 해당 매개변수를 사용하여 출력을 리디렉션하는 것은 불가능합니다. 이 질문에서는 이 출력이 어디에서 왔는지 또는 sdterr다른 곳에서 나오는지, 그리고 이 출력을 리디렉션하는 방법을 알고 싶습니다 .

편집하다

ls -l /proc/PID/fd/반품:

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

답변1

끔찍한 명령:

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 &

나를 위해 작동하며 다음을 기록합니다.

READY....
Listening...
HELLO

파일에 추가하면 필요하지 않은 항목을 쉽게 정리할 수 있습니다.

편집하다: 나중에 누군가가 이 작업을 직접 수행하는 경우 &콘솔에서 수행하는 경우 명령 끝에 '를 제거하고 Python이나 다른 언어를 통해 수행하는 경우 끝에 '를 그대로 두십시오 &.

답변2

이것리눅스 매뉴얼페이지는 말한다

표준 입력 및 출력 스트림은 스트림이 대화형 장치를 참조하지 않는 경우에만 완전히 버퍼링됩니다.

따라서 출력에 내용이 나타나기 전에 대량의 출력(4096바이트)을 생성해야 할 수도 있습니다.

Pocketsphinx를 중지하는 일반적인 방법이 있고 올바르게 구현된 경우 중지할 때 버퍼를 출력 파일로 플러시해야 합니다. 이는 최소한 버퍼링 이론을 입증하지만, 물론 적시에 출력을 얻는 데는 도움이 되지 않습니다.

이 답변또는 해당 질문이 있는 다른 사람이 도움이 될 수 있습니다.

관련 정보