使用Youtube API v3上传视频时如何实现多行描述?
问题原因与解决方案
你的问题确实是换行符\n被shell解析打断了命令结构导致的。当你用' '.join(command)把参数拼接成字符串,再加上shell=True时,shell会把\n识别为命令的换行分隔符,所以--description的参数只被解析到Line 1,后面的Line 2被当成了新的无效命令。
解决这个问题的核心是不要手动拼接命令字符串,直接传递参数列表给subprocess.run,并且禁用shell=True——subprocess的列表模式会自动处理参数中的特殊字符(包括换行、空格),不需要手动加引号。
修改后的YTUpload函数如下:
def YTUpload(file, title, description, keywords, category, privacyStatus): command = [ 'python', 'upload_video.py', '--file', file, '--title', title, '--description', description, '--keywords', keywords, '--category', category, '--privacyStatus', privacyStatus, '--noauth_local_webserver' ] subprocess.run(command, check=True)
关键改动说明:
- 去掉了每个参数中的手动引号(比如
f'--file="{file}"'改成'--file', file):列表模式下subprocess会自动处理参数的边界,不需要额外加引号,加了反而会让引号成为参数内容的一部分(比如文件名会变成带双引号的,导致找不到文件)。 - 移除了
' '.join(command)和shell=True:直接传递列表给subprocess.run,确保每个参数(包括带换行符的description)被完整传递给upload_video.py。 - 可选:加上
check=True可以在命令执行失败时主动抛出异常,方便你捕获错误(原来的try-except也能生效,但更严谨)。
调用部分的description = f"Line 1\nLine 2"不需要改动,换行符会被完整传递,最终YouTube上的描述会显示为两行。
内容的提问来源于stack exchange,提问作者Thomas Krauklis
相关产品推荐
相关产品推荐

