Как изменить вывод текущей скорости из консольной программы speedtest или аналогичной так, чтобы строки выводились поочередно с переходом на новую строку (LF-CRLF)?

Как можно записать и обработать полный вывод консольной программы для отслеживания промежуточных значений скорости на каждой строке, вместо того чтобы только фиксировать конечное значение?
  • 19 августа 2024 г. 17:03
Ответы на вопрос 2
Для изменения вывода текущей скорости из консольной программы speedtest или аналогичной так, чтобы строки выводились поочередно с переходом на новую строку, можно воспользоваться стандартными инструментами для обработки вывода в консоли. Например, можно использовать программу `sed` для замены символов переноса строки. Ниже приведен пример команды для Linux:

```bash
speedtest | sed 's/$/\r/'
```

Эта команда будет выводить строки поочередно с переходом на новую строку (возвратом каретки).

Чтобы записать и обработать полный вывод консольной программы для отслеживания промежуточных значений скорости на каждой строке, можно использовать скрипт на языке программирования, поддерживающем работу с процессами ввода-вывода. Например, на Python это можно сделать следующим образом:

```python
import subprocess

process = subprocess.Popen(['speedtest'], stdout=subprocess.PIPE)

for line in process.stdout:
    # Обработка каждой строки вывода speedtest
    print(line)
```

Этот код будет считывать каждую строку вывода программы speedtest и позволит вам обрабатывать каждое промежуточное значение скорости.
Если записать вывод данных в файл
# /opt/speedtest/speedtest | tee spdt.log
то в файле не видно промежуточных значений значений.

Дело в том, что консольная программа может определить, направлен ли её вывод в терминал или в файл, и вести себя по разному, в зависимости от этого. Понаблюдать, что и как именно программа выводит можно запустив её под strace, например так:
strace -f -e ioctl,write -o log <program command line>

Соответственно, поймать что такая программа выводит в процессе можно только предоставив ей в качестве вывода эмуляцию терминала.
Похожие вопросы