我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
答案1
youtube-dl
在后台运行,但它仍然会向你的终端发送输出,并产生大量输出来通知你它的进度。有很多方法可以改变这种情况,但你可能想要youtube-dl
生产更少的输出,或者导致其输出被发送到文件(或完全丢弃)而不是出现在您的终端中。
方法一:运行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
works。
方法 2a:将输出重定向至/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 &
当我运行该程序时,我的 shell 只显示
[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 &
方法 3a:将正常输出和错误输出都重定向到/dev/null
。
如果您确实想要,您可以将标准输出和标准错误重定向到,/dev/null
以便将其全部丢弃:
youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &> /dev/null &
不过,您可能希望看到实际的错误消息。如果您不想要的只是状态消息和警告,则不需要任何重定向。在这种情况下,您可以youtube-dl -q --no-warnings
按上述方法使用。(参见方法 1。)
答案2
假设 Eliah 的回答中的所有建议均不起作用或不适用。
不确定为什么图书馆似乎不支持安静选项
self.to_screen('由于--no-playlist,仅下载视频 %s' % 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 这将永久省略各种输出。