Youtube-dl 拒绝在后台运行

Gre*_*one 2 command-line bash redirect background 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
Run Code Online (Sandbox Code Playgroud)

Eli*_*gan 6

youtube-dl正在后台运行,但它仍在向您的终端发送输出,并生成大量输出以通知您其进度。有许多的方法来改变这一点,但你可能要么想使youtube-dl 产生更少的输出,或导致其输出发送到一个文件(或干脆丢弃),而不是出现在你的终端。

方式 1:运行youtube-dl -q以抑制状态消息。

如果您不想看到进度消息,您可以将-q标志(或--quiet,它做同样的事情)传递给youtube-dl命令:

youtube-dl -q https://www.youtube.com/watch?v=NZ-ElsvYKyo &
Run Code Online (Sandbox Code Playgroud)

当然,您必须用您尝试下载的任何内容替换该 URL。可能仍会打印一些消息,包括错误和警告。但很可能你想看到这些。

如果您不想youtube-dl产生任何警告,则可以youtube-dl使用该--no-warnings标志运行。不过,我不建议这样做,除非您确定这是您想要的。

youtube-dl -q --no-warnings https://www.youtube.com/watch?v=NZ-ElsvYKyo &
Run Code Online (Sandbox Code Playgroud)

要了解有关 接受的命令行选项的更多信息youtube-dl,您可以在线运行man youtube-dl阅读其手册页

方式2:将标准输出重定向youtube-dl到文件。

要将输出附加到dl.log当前目录中(您可以将其命名为您想要的名称,如果它不存在,则会创建它),运行:

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo >> dl.log &
Run Code Online (Sandbox Code Playgroud)

如果要覆盖 dl.log而不是将文本附加到末尾,请使用>代替>>

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo > dl.log &
Run Code Online (Sandbox Code Playgroud)

然后将正常输出重定向到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
Run Code Online (Sandbox Code Playgroud)

其他所有内容都进入了日志文件:

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:~$
Run Code Online (Sandbox Code Playgroud)

您可以随时查看输出cat(正如我在上面所做的那样),以检查进度。

当您youtube-dl不使用 运行时-q,它会产生主要用于终端的输出。此输出包括控制字符,它告诉终端擦除先前的进度消息,以便可以用新的进度消息在视觉上替换它。某些查看文件的方式(例如cat dl.log)不会显示“已删除”消息或控制字符。不过,它们仍然是文件的一部分,您可以使用其他一些实用程序查看它们;例如,view dl.log作品。

方式2a:将输出重定向到/dev/null以摆脱它。

如果您希望输出只是被丢弃而不是保存在实际文件中,那么您可以将其重定向到/dev/null

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo > /dev/null &
Run Code Online (Sandbox Code Playgroud)

使用/dev/null,“覆盖” ( >) 或“附加” ( >>)都没有关系。

这通常是一种方便的技术,尽管对于youtube-dl. 如果你想抑制进度,你可以直接运行youtube-dl -q

方式 3:也重定向标准错误。

常规输出错误输出是分开的。youtube-dl两者都生产是很常见的。上述方法仅重定向标准输出。您还可以重定向标准错误。重定向可以做很多事情,包括将两个输出流重定向到单独的文件。出于我们的目的,我将展示如何将标准输出和标准错误发送到同一个文件:

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &>> dl.log &
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我的外壳只显示

[2] 15009
Run Code Online (Sandbox Code Playgroud)

...并且常规输出和错误输出都出现在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:~$
Run Code Online (Sandbox Code Playgroud)

上面使用的示例&>>,附加到dl.log. 要改写文件,请使用&>(or >&,这也适用) 而不是&>>

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &> dl.log &
Run Code Online (Sandbox Code Playgroud)

方式 3a:将正常输出和错误输出都重定向到/dev/null.

如果你真的想要,你可以将标准输出和标准错误都重定向到,/dev/null这样它就被简单地丢弃了:

youtube-dl https://www.youtube.com/watch?v=NZ-ElsvYKyo &> /dev/null &
Run Code Online (Sandbox Code Playgroud)

不过,您可能希望看到实际的错误消息。如果它只是您不想要的状态消息和警告,那么您不需要任何重定向。在这种情况下,您可以youtube-dl -q --no-warnings如上所述使用。(见方式1。)