Youtube-dl отказывается работать в фоновом режиме
Я бегу youtube-dl
в фоновом режиме, поставив &
после команды. Проблема в том, что мне все равно, что я помещаю его в фоновом режиме и продолжаю печатать информацию в терминале.
Он не только отказывается останавливаться с помощью Ctrl+C или Ctrl+Z, он просто не делает ничего, кроме показа этих сообщений. Чтобы остановить это, я должен закрыть терминал.
Вот что происходит именно так:
mohamed@Smithers:~$ clear
mohamed@Smithers:~$ youtube-dl https://www.youtube.com/watch?v=LMQsYSuw8hw &
[1] 2028
mohamed@Smithers:~$ [youtube] LMQsYSuw8hw: Downloading webpage
[youtube] LMQsYSuw8hw: Downloading video info webpage
[youtube] LMQsYSuw8hw: Extracting video information
[youtube] LMQsYSuw8hw: Downloading MPD manifest
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Resuming download at byte 11440128
[download] Destination: I Was On Japanese TV... and I F#%KING HATED IT.-LMQsYSuw8hw.f137.mp4
[download] 4.8% of 231.85MiB at 199.01KiB/s ETA 18:56^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download] 4.8% of 231.85MiB at 136.95KiB/s ETA 27:30^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download] 5.0% of 231.85MiB at 127.41KiB/s ETA 29:31^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download] 5.0% of 231.85MiB at 111.38KiB/s ETA 33:44^C
mohamed@Smithers:~$ ^C
[download] 5.0% of 231.85MiB at 111.21KiB/s ETA 33:47^C
mohamed@Smithers:~$ ^C
[download] 5.1% of 231.85MiB at 116.77KiB/s ETA 32:09^C
[download] 5.5% of 231.85MiB at 108.71KiB/s ETA 34:24^C
[download] 5.6% of 231.85MiB at 76.68KiB/s ETA 48:41
2 ответа
youtube-dl
работает в фоновом режиме, но все еще отправляет вывод на ваш терминал и выдает довольно много информации, чтобы проинформировать вас о своем прогрессе. Есть несколько способов изменить это, но вы, вероятно, захотите youtube-dl
производить меньше вывода или заставить его вывод отправляться в файл (или вообще отбрасываться) вместо того, чтобы появляться в вашем терминале.
Способ 1: Беги youtube-dl -q
подавить статусные сообщения.
Если вы не хотите видеть сообщения о прогрессе, вы можете передать -q
флаг (или --quiet
который делает то же самое) к youtube-dl
команда:
youtube-dl -q https://www.youtube.com/watch?v=NZ-ElsvYKyo &
Конечно, вам придется заменить этот URL тем, что вы пытаетесь загрузить. Некоторые сообщения все еще могут быть напечатаны, включая ошибки и предупреждения. Но, скорее всего, вы хотите увидеть это.
Если не хочешь youtube-dl
чтобы выдавать какие-либо предупреждения, вы можете запустить youtube-dl
с --no-warnings
флаг. Я не предлагаю этого делать, если только вы не уверены, что хотите этого.
youtube-dl -q --no-warnings https://www.youtube.com/watch?v=NZ-ElsvYKyo &
Чтобы узнать больше о параметрах командной строки, принятых youtube-dl
, Вы можете запустить man youtube-dl
или прочитайте его страницу руководства онлайн.
Способ 2: перенаправить стандартный вывод youtube-dl
в файл.
Чтобы добавить вывод к dl.log
в текущем каталоге (вы можете назвать это как хотите, и он будет создан, если он еще не существует), запустите:
youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo >> dl.log &
Если вы хотите перезаписать dl.log
вместо добавления текста в конец используйте >
вместо >>
:
youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo > dl.log &
Нормальный выход будет перенаправлен на dl.log
(или любой другой файл, который вы скажете использовать). Однако вывод ошибок все равно будет отображаться на вашем терминале. Например, когда я выполнил эту команду, на моем терминале было напечатано одно предупреждение:
ek@Io:~$ youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo >> dl.log &
[1] 14456
ek@Io:~$ WARNING: Requested formats are incompatible for merge and will be merged into mkv
Все остальное ушло в лог файл:
ek@Io:~$ cat dl.log
[youtube] NZ-ElsvYKyo: Downloading webpage
[youtube] NZ-ElsvYKyo: Downloading video info webpage
[youtube] NZ-ElsvYKyo: Extracting video information
[youtube] NZ-ElsvYKyo: Downloading MPD manifest
[download] Destination: Lecture 1 _ Topics in String Theory-NZ-ElsvYKyo.f244.webm
[download] 23.2% of 359.52MiB at 204.49KiB/s ETA 23:02ek@Io:~$
Вы можете просмотреть вывод с cat
(как я делал выше) в любое время, чтобы проверить прогресс.
Когда ты бежишь youtube-dl
без -q
, он производит вывод, который в первую очередь предназначен для терминала. Этот вывод включает управляющие символы, которые сообщают терминалу удалить предыдущее сообщение о ходе выполнения, чтобы его можно было визуально заменить новым сообщением о ходе выполнения. Некоторые способы просмотра файла, такие как cat dl.log
, не будет отображать "стертые" сообщения или управляющие символы. Тем не менее, они все еще являются частью файла, и вы можете просматривать их с помощью некоторых других утилит; например, view dl.log
работает.
Способ 2а: перенаправить вывод на /dev/null
чтобы избавиться от этого.
Если вы хотите, чтобы вывод просто отбрасывался, а не сохранялся в реальном файле, вы можете перенаправить его на /dev/null
:
youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo > /dev/null &
С/dev/null
, не имеет значения, если вы "перезаписать" (>
) или "добавить" (>>
).
Это удобная техника в целом, хотя, вероятно, нет необходимости вyoutube-dl
, Если вы хотите подавить прогресс, вы можете просто запуститьyoutube-dl -q
вместо.
Способ 3: перенаправить стандартную ошибку тоже.
Обычный вывод и вывод ошибок являются раздельными. Это распространено для youtube-dl
производить оба. Вышеуказанный метод перенаправил только стандартный вывод. Вы также можете перенаправить стандартную ошибку. Вы можете многое сделать с перенаправлением, включая перенаправление двух выходных потоков в отдельные файлы. Для наших целей я просто покажу, как отправить и стандартный вывод, и стандартную ошибку в один и тот же файл:
youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &>> dl.log &
Когда я запустил это, моя оболочка показала только
[2] 15009
... и обычный вывод и вывод ошибок появились в dl.log
:
ek@Io:~$ cat dl.log
[youtube] NZ-ElsvYKyo: Downloading webpage
[youtube] NZ-ElsvYKyo: Downloading video info webpage
[youtube] NZ-ElsvYKyo: Extracting video information
[youtube] NZ-ElsvYKyo: Downloading MPD manifest
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: Lecture 1 _ Topics in String Theory-NZ-ElsvYKyo.f244.webm
[download] 0.0% of 359.52MiB at 107.65KiB/s ETA 56:59ek@Io:~$
Приведенный выше пример используется &>>
, который добавляет к dl.log
, Чтобы перезаписать файл, используйте &>
(или же >&
, что тоже работает) вместо &>>
:
youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &> dl.log &
Способ 3а: перенаправить как нормальный, так и вывод ошибок на /dev/null
,
Если вы действительно хотите, вы можете перенаправить как стандартный вывод, так и стандартную ошибку на /dev/null
так что все просто отбрасывается
youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &> /dev/null &
Вы, вероятно, хотите увидеть реальные сообщения об ошибках, хотя. Если вам не нужны только сообщения о состоянии и предупреждения, то вам не нужно перенаправление. В этом случае вы можете использовать youtube-dl -q --no-warnings
как описано выше. (См. Путь 1.)
Предполагая, что ни один из советов не сработал или не применим из ответа Элии.
Не уверен, почему библиотека не поддерживает тихий вариант для
self.to_screen('Загружается только видео %s из-за --no-playlist' % video_id)
выходы, как можно было бы ожидать, чтобы они работали...
Часть кода здесь
def report_download_webpage(self, video_id):
"""Report webpage download."""
self.to_screen('%s: Downloading webpage' % video_id)
в Lib\site-packages\youtube_dl\extractor\Common.py является виновником аута в вызове self.to_screen.
если вы исключите вызовы self.to_screen в любом загрузчике, который вы вызываете с помощью # - например, site-packages\youtube_dl\extractor\youtube.py Это навсегда исключит различные выходные данные.