python子进程check_output破坏输出

问题描述 投票:0回答:1

我正在使用 yt-dlp python 模块来获取媒体的标题

msdos>yt-dlp --get-filename https://www.youtube.com/watch?v=XKuL5xaKZHM
薛之謙 Joker Xue【演員】官方完整版 MV [XKuL5xaKZHM].webm 

但是当我从 python subprocess.check_output 调用它时我得到了

cmd = ['yt-dlp', '--get-filename', 'https://www.youtube.com/watch?v=XKuL5xaKZHM']
val = subprocess.check_output(cmd, encoding='utf-8')
print(val)

我有

 Joker Xue MV [XKuL5xaKZHM].webm

不知何故它被破坏了。但是,如果我从 vscode 运行和调试,我会得到正确的输出。任何想法 ?我在 Windows 11 上使用 winpython 3.9

python subprocess
1个回答
0
投票

这似乎是

yt-dlp
的限制,它删除了它认为“不应”成为文件名一部分的字符。要读取真实数据,请使用
-J
选项下拉 JSON 并解析生成的 JSON:

import json
import subprocess

cmd = ['yt-dlp', '-J', 'https://www.youtube.com/watch?v=XKuL5xaKZHM']
val = subprocess.check_output(cmd)
val_obj = json.loads(val)
print(val_obj['title'], val_obj['id'], val_obj['ext'])
# 薛之謙 Joker Xue【演員】官方完整版 MV XKuL5xaKZHM webm

根据需要从

val_obj
中提取其他信息。

© www.soinside.com 2019 - 2024. All rights reserved.