Как добавить метку времени к разговору о transcripted?

Для нахождения, какие аргументы были переданы pdnsd я сделаю:

[~]> pgrep -l pdnsd
1373 pdnsd
[~]> cat /proc/1373/cmdline 
/usr/sbin/pdnsd--daemon-p/var/run/pdnsd.pid[~]> 

(cmdline записи файла разделяются нулевыми символами; используйте что-то как tr '\0' '\n' </proc/<pid>/cmdline видеть более четкий вывод.)

/proc/<pid>/ содержит большую информацию.

1
17.11.2011, 13:34
2 ответа

Действительно mplayer сохраняет его собственный указатель в файл, таким образом, он не замечает когда echo записи к нему. Когда Вы имеете несколько программ, пишущих в файл, принимаете меры, чтобы все они открылись, файл в добавляют режим. В добавляют режим, каждая запись происходит в конце файла. От оболочки это >>. Создайте пустой файл с : >events.log если Вы хотите начать заново, затем работать mplayer … >>events.log.

Обратите внимание, что, в то время как это гарантирует, что каждый байт из любой программы закончится в файле, нет в принципе никаких гарантий, что они не будут вкраплены: в теории, echo hello >>events.log мог привести к h, затем некоторый вывод mplayer, затем e, и т.д. появляясь в файле. На практике, на большинстве, если не все системы, команда эха, печатающая самое большее 512 байтов, закончится в одной части.

1
27.01.2020, 23:54
  • 1
    Спасибо Gilles. Это разрешило вуаль. Я задавался вопросом об аномалиях порождения кэширования... Хорошо у меня есть пчела, думающая об этом (много), и я добрался до размышления, что, что, казалось, работало против меня, возможно, должен быть охвачен, и я работаю с нею... Бинго! Все световые сигналы продвинулись! Ответ является видом очевидных. Это бросалось мне в глаза и не могло видеть его из-за моего намеченного решения... Я прочитал чей-то комментарий об этом синдроме просто на днях.. Я не могу помнить то, что он назвал им, но это соответствует. Не видьте решение из-за внимания на решение.. Я отправлю его... Спасибо Tim –  Peter.O 18.11.2011, 06:07

Примечание. Это - ответ на мой собственный вопрос

Следующий метод работает вполне хорошо. Это отправляет, ряд несвязанных нажатий клавиш к mplayer (mplayer регистрирует эти недопустимые нажатия клавиш). Каждая нажатая клавиша выбрана для представления одной десятичной цифры, например, отправки F2 F5 F7 представляет десятичное число 257. Отправка 6 чисел цифры занимает приблизительно 0,2 секунды. Метка времени взята от строки журнала незадолго до первого (заголовок) нажатие клавиши. Это избегает всех проблем assiciated с кэшированием задержек, как упомянуто в ответе Gilles.

Это может быть выполнено очень легко от emacs просто переместившись point (курсор) к другой строке, или путем нажатия определенной клавиши (что код не здесь, но я ожидал бы, что это будет достаточно просто (я плохо знаком с elisp). Вот кодированное и альфа-протестированное решение...

# Insert a number (input to this script) into mplayer's log; 
# Each digit of the input number is translated into
#   a key-press for which mplayer does not have a binding.
# mplayer makes a log entry for each invalid key-press.
# The log entry identifies the key, so the entry can be 
#   translated back into its original decimal value
#
# A leading and a trailing marker are also sent to mplayer
#
# A simple parsing of the log can rebuild the original  
#   number and the time within the media stream when it occurred.
# 
num=${1:-123456} # Default if for testing only 
shopt -s extglob # For splitting the input number

# Window ID ($2)   Defaults to win whose title == $USER@$HOSTNAME.*
win=${2:-$(($(wmctrl -l | sed -nr "s/^([^ ]+).* $USER@$HOSTNAME.*/\1/p")))}

#    ==========  =====  ===  # Key-press translation array
#    0123456789  begin  end  # decimal digits and delimiters
key=(F12 F{1..9}   c     \') # key names
#    ==========  =====  ===  # 

xdotool key --window $win ${key[10]}    # HEAD Marker   
for i in ${num//?(.)/ } ;do
    xdotool key --window $win ${key[i]} # Encoded decimal digit
done
xdotool type --window $win ${key[11]}   # TAIL Marker

Вот 3 процесса продолжения шага для извлечения метки времени и числа (номер строки или смещение байта/символа в исходном тексте)...

# (1) Each line of mplayer's normal output (vs errors) ends  
#     witn `\x1B\[J\x0D`.  First, convertd this to `\n` 
sed -nr 's/\x1B\[J\x0D/\n/gp' mplayer.log  >/dev/null

# (2) The above pre-processing step(1) can be piped to the next sed step, 
#     but I've redirected it to /dev/nul for this example
#     The following step works with a few lines of the pre-processed log
nbfk="No bind found for key"
sed -nr " 
    /^$nbfk 'c'\./,/^$nbfk '''\./{
        /^$nbfk 'c'\./{g                 # HEAD Marker found 
            s/^A: *([0-9.]+).*/000000\1/
            s/^0*([0-9]{6}\..*)/T:\1/p
        }
        s/^$nbfk 'F12'\..*/0/p           # Digit      
        s/^$nbfk 'F([1-9])'\..*/\1/p     # Digit
        s/^$nbfk '''\..*/--/p            # TAIL Marker found       
    }
    h" <<'EOF'
A:  18.6 (18.6) of 3207.0 (53:27.0)  0.1% 
A:  18.7 (18.6) of 3207.0 (53:27.0)  0.1% 
No bind found for key 'c'.                         
A:  18.7 (18.6) of 3207.0 (53:27.0)  0.1% 
No bind found for key 'F1'.                         
A:  18.7 (18.7) of 3207.0 (53:27.0)  1.0% 
No bind found for key 'F2'.                         
A:  18.7 (18.7) of 3207.0 (53:27.0)  0.1% 
A:  18.8 (18.7) of 3207.0 (53:27.0)  0.1% 
No bind found for key 'F3'.                         
A:  18.8 (18.8) of 3207.0 (53:27.0)  0.1% 
No bind found for key 'F4'.                         
A:  18.8 (18.8) of 3207.0 (53:27.0)  0.1% 
No bind found for key 'F5'.                         
A:  18.9 (18.8) of 3207.0 (53:27.0)  0.1% 
No bind found for key 'F6'.                         
A:  18.9 (18.8) of 3207.0 (53:27.0)  0.1% 
No bind found for key '''.                         
A:  18.9 (18.9) of 3207.0 (53:27.0)  0.1% 
A:  19.0 (18.9) of 3207.0 (53:27.0)  0.1% 
EOF

# (3) The above step(2) can be piped to the next sed step, 
#     but I've let it go to stdout for this example
#     The following example step works with output of step (2)
sed -nr "
    /^T:[0-9.]+$/,/^--$/{
        /^T:[0-9.]+$/{ s/^T:(.*)/\1 /; h}
        /^[0-9]$/H
        /^--$/{g; s/\n//g; p}
    }" <<'EOF'
T:000018.7
1
2
3
4
5
6
--
EOF

Вот окончательный результат: time in seconds и тест line number

 000018.7 123456
0
27.01.2020, 23:54

Теги

Похожие вопросы