Нет выходной информации об аудио CDROM в Python с использованием CDparanoia - PullRequest
0 голосов
/ 30 апреля 2020

Я занимаюсь разработкой двух простых Python приложений для своей супруги (на Raspberry Pi 4+ с 7-дюймовым сенсорным экраном). Радио Inte rnet все еще работает стабильно и нормально.

Теперь это время добавить приложение для ее старых коллекций аудио CD. Но до сегодняшнего дня я не могу решить эту проблему.

Я хочу знать, сколько треков на нем, так что я могу выбрать один для воспроизведения.

Моя последняя надежда состояла в том, чтобы сделать это с помощью команды оболочки. Конечно, команда прекрасно работает в среде UNIX, но не в Python. И я не понимаю, какую ошибку я допустил. Может ли это быть Проблема метода .decode('UTF-8') Меня удивляет, что через несколько секунд после выполнения command_2 cdrom начинает работать на несколько секунд. Но такое же поведение при использовании команды в командной строке. Во время команд это вполне.

Если бы был кто-то с полезной идеей / решением или мог бы сказать мне, какое у меня недопонимание, это было бы очень приятно.

import subprocess
from subprocess import PIPE

command_1 = ("ls", "-l")
result = subprocess.run(command_1, stdout=PIPE, stderr=PIPE)
out = result.stdout
err = result.stderr

for line in out.decode('utf-8').splitlines():
    print("Result", line)

# up to here everything works nice as expected

# trying to run my favorite, I come into trouble
command_2 = ["cdparanoia", "-sQ"]
result = subprocess.run(command_2, stdout=PIPE, stderr=PIPE)
out = result.stdout
err = result.stderr

for line in out.decode('utf-8').splitlines():
    print("Result", line)

Вывод команды command_1 - это хорошо известное xample вы найдете везде.

Вывод command_2

/home/pi/PycharmProjects/cd/venv/bin/python /home/pi/PycharmProjects/cd/cdrom.py

Process finished with exit code 0

Это выглядит не очень информативно для меня.

Запуск command_2 в командной строке показывает, что у меня будет Ожидается:

pi@raspberrypi:~ $ cdparanoia -sQ
cdparanoia III release 10.2 (September 11, 2008)

Table of contents (audio tracks only):
track        length               begin        copy pre ch
===========================================================
  1.    22190 [04:55.65]       55 [00:00.55]    no   no  2
  2.    11350 [02:31.25]    22245 [04:56.45]    no   no  2
  3.    20567 [04:34.17]    33595 [07:27.70]    no   no  2
  4.    23500 [05:13.25]    54162 [12:02.12]    no   no  2
  5.    16985 [03:46.35]    77662 [17:15.37]    no   no  2
  6.    27358 [06:04.58]    94647 [21:01.72]    no   no  2
  7.    15880 [03:31.55]   122005 [27:06.55]    no   no  2
  8.    38797 [08:37.22]   137885 [30:38.35]    no   no  2
  9.    11043 [02:27.18]   176682 [39:15.57]    no   no  2
TOTAL  187670 [41:42.20]    (audio only)

pi@raspberrypi:~ $

Чтобы опередить вопрос: 10

cdparanoia -sQ > file.txt

не работает даже в командной строке. Может быть, есть причина для имени команды cdPARANOIA? ?

1 Ответ

0 голосов
/ 30 апреля 2020

Я нашел решение своей проблемы. Я не понял, что цвет экрана вывода был RED . Красный - индикатор ошибок в PyCharm. Это дало мне идею, что это может быть вывод ошибки. Следующий шаг, я использовал следующую команду в командной строке: cdparanoia -Q 2>&1 | tee /home/pi/toc.txt. В результате получается текстовый файл, который я теперь могу использовать для дальнейшего программирования. Может быть, это может быть полезно для других энтузиастов cdrom. Вот мой тестовый файл для получения дополнительной информации:

import os

test = 4

if test == 1:      # RED text
    command = "cdparanoia -Q"

elif test == 2:    # WHITE text
    command = "cdparanoia -Q 2>&1"

elif test == 3:    # WHITE text, but no text file, the output needs to be doubled
    command = "cdparanoia -Q 2>&1 /home/pi/toc.txt"

elif test == 4:    # WHITE text and a textfile
    command = "cdparanoia -Q 2>&1 | tee /home/pi/toc.txt"

print("Test ", test, os.system(command))
...