Intereting Posts
Скрипт Bash не зацикливается Как узнать, где установлены переменные и функции оболочки? Выполнить команду в фоновом режиме, которая устанавливает функцию env var или define FreeBSD не отображается в меню grub после установки на DualBoot. (Теперь система TriBoot) Запретить пакет resolvconf назначать localhost, если named host9 / dnsmasq находится на хосте Какой формат использует человек? Почему мы дважды цитируем оценку знака доллара в Bash? Странное поведение шрифта Пантеона Возобновляемый архив Файловые дескрипторы и имена файлов Вам нужно сравнить два файла и распечатать все столбцы, а затем отобразить как NA, а затем присоединиться к другому файлу Как «связывать» sshd только с данным интерфейсом? du не может получить доступ к файлу – нет такой ошибки файла или каталога Почему «nohup» и «disout» не работают на SoX (вызывается как «игра») Env-переменные не загружаются в bash

Выход находится в консоли, но не является частью stdout или stderr

У меня есть команда, которая выводит следующее:

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

Это распознавание речи из pocketsphinx_continuous .

Мне нужен этот вывод, перенаправленный в файл, и, похоже, он не отправляется из stdout или stderr потому что я попытался добавить 1>log.txt и 2>log.txt и каждый раз, когда они пусты.

Вот кикер: когда я добавляю 1>log.txt к команде, больше нет вывода на консоль, но log.txt по-прежнему пуст.

Кроме того, когда я добавляю | tee log.txt | tee log.txt не отображается в консоли, и файл остается пустым.

Этот вывод поступает из stdout , если да, то почему он не перенаправляется на файл?

Этот вопрос связан с моим другим вопросом здесь: Перенаправить вывод Pocketsphinx_continuous в файл

Pocketsphinx странно, и использование его аргументов для перенаправления вывода для меня невозможно, в этом вопросе я просто хочу знать, откуда этот вывод поступает из sdtout или 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 

Отвратительная команда:

 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 

к файлу, и легко избавиться от ненужного материала.

EDIT: Если кто-то делает это сам в будущем, удалите & в конце этой команды, если вы выполняете ее в консоли, если вы выполняете ее через Python или на другом языке, сохраните & в конце.

На страницах руководства Linux

стандартные потоки ввода и вывода полностью буферизуются тогда и только тогда, когда потоки не относятся к интерактивному устройству.

Таким образом, вам может потребоваться генерировать много выходных данных (4096 байт), прежде чем что-то появится на выходе.

Если существует обычный способ остановить pocketsphinx, и если он выполняется правильно, он должен очистить буферы до выходного файла, когда вы его остановите. Это, по крайней мере, доказало бы теорию буферизации, но, конечно же, это не помогло бы вам вовремя получить результаты.

Этот ответ или другие вопросы по соответствующему вопросу могут помочь.