Youtube-dl 拒绝在后台运行

Youtube-dl 拒绝在后台运行

youtube-dl通过在命令后面添加来在后台运行&。问题是它不关心我将其放在后台并继续在终端上打印信息。

它不仅拒绝使用Ctrl+CCtrl+停止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.logworks。

方法 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 这将永久省略各种输出。

相关内容