youtube-dl: запретить печать метаданных JSON при ошибке - PullRequest
0 голосов
/ 02 июля 2019

Я создал сценарий PowerShell для объединения загруженных метаданных видео в один файл javascript (для использования в локальном файле средства просмотра html).Это мой сценарий:

Write-Host "Searching for and downloading videos . . . "
if(![System.IO.File]::Exists('.\database.js')){
    Set-Content -Path .\database.js -Value "const database = [
]"
}
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$i = 0;
$stopWatch = [system.diagnostics.stopwatch]::startNew()
.\youtube-dl.exe --print-json -a urls.txt --download-archive archive.txt -o Z://Downloads/ -i | foreach {
    $stream = [IO.File]::OpenWrite('.\database.js')
    $stream.SetLength($stream.Length - 4)
    $stream.Close()
    $stream.Dispose()

    $_ + ",
]" | Add-Content .\database.js
    $i++
}
$elapsed = $stopWatch.Elapsed.ToString("hh\:mm\:ss")
Write-Host "Downloaded $i videos. Took $elapsed."
Read-Host -Prompt "Done, press Enter to exit"

Однако, если при загрузке видео возникает ошибка, JSON все равно добавляется в мой файл database.js.Чтобы проверить это, я намеренно установил свое выходное местоположение на несуществующий диск (Z).В моем файле urls.txt есть два URL-адреса видео.Это вывод из моего скрипта:

Searching for and downloading videos . . .
ERROR: unable to create directory [WinError 3] The system cannot find the path specified: 'Z:\\'
ERROR: unable to create directory [WinError 3] The system cannot find the path specified: 'Z:\\'
Downloaded 2 videos. Took 00:00:04.
Done, press Enter to exit:

youtube-dl правильно определяет, что при загрузке видео произошла ошибка, и идентификаторы видео не добавляются в archive.txt.Однако JSON все еще печатается и добавляется в database.js.Как я могу обнаружить, когда youtube-dl обнаруживает ошибку, поэтому JSON не добавляется в datbase.js?

...