Subprocess.Popen останавливается (или сбои) через несколько секунд - PullRequest
0 голосов
/ 12 сентября 2018

Я начинающий, поэтому извиняюсь за любые ошибки.Это мой код в Python 3.5.Он исполняется в Raspbian на Raspberry Pi 3.

import subprocess

radio = subprocess.Popen(["mplayer", 'http://edge-bauerabsolute-02-gos1.sharp-stream.com/absolute90s.mp3?'], shell = False , stdout=subprocess.PIPE)

print ("Other code - no waiting for the subprocess to finish")

Радио играет около 30 секунд, а затем останавливается.Я хочу, чтобы он работал в фоновом режиме без сценария, ожидающего завершения подпроцесса.Кроме того, в то время как в Linux, если я останавливаю сценарий, радио возвращается снова как работающий процесс mplayer (так что сценарий python должен как-то его останавливать?)

Кажется, что подпроцесс продолжается, но музыка/ Звук останавливается.Кажется, он не связан с подключением к интернету, и если я подожду, он не запустится снова.Я попытался сделать radio.communicate () или radio.stdout.read (), что достаточно забавно, позволяет моему радио играть постоянно, но сценарий не продолжается.У меня нет выходных данных, сценарий просто удерживает.

Вопрос: Как разрешить процессу «радио» продолжить работу в фоновом режиме (при включенной музыке), в то время как сценарий выполняет другие действия?

1 Ответ

0 голосов
/ 12 сентября 2018

Я решил это сам, к счастью. Подпроцесс. PIPE, по-видимому, останавливает / мешает процессу, поэтому вместо stdout = subprocess.PIPE я сделал DEVNULL следующим образом:

DEVNULL = open(os.devnull, 'wb')
radiostream = subprocess.Popen(["mplayer", 'http://edge-bauerabsolute-02-gos1.sharp-stream.com/absolute90s.mp3?&'], shell = False, stdout=DEVNULL, stderr=DEVNULL)
...