Python TypeError:只能将list(而不是“str”)连接到list subprocess.call

Python TypeError:只能将list(而不是“str”)连接到list subprocess.call,python,subprocess,Python,Subprocess,我正在尝试构建一个小脚本来下载视频。我在尝试将整数传递到子进程时遇到问题。请提前致电谢谢 # test url for analysis URL = 'https://www.youtube.com/watch?v=7WauUpq4N8I' import subprocess subprocess.call("youtube-dl -F '%s'" %URL, shell=True) print # outlist numerical list of options #input choice

我正在尝试构建一个小脚本来下载视频。我在尝试将整数传递到子进程时遇到问题。请提前致电谢谢

# test url for analysis
URL = 'https://www.youtube.com/watch?v=7WauUpq4N8I'
import subprocess
subprocess.call("youtube-dl -F '%s'" %URL, shell=True)
print
# outlist numerical list of options
#input choice
Q = raw_input('Please select download quality from above ')
print 
# pass input Q (integer) to subprocess.call
import subprocess
subprocess.call(["youtube-dl -f "] + Q ,["'%s'" %URL], shell=True) 
回溯(最近一次呼叫最后一次):

文件“/youtube.py”,第21行,在
子进程调用([“youtube dl-f”]+Q,[“'%s'”%URL],shell=True)
TypeError:只能将列表(而不是“str”)连接到列表

subprocess.call是第21行错误消息告诉您不能将列表(例如:
['foo','bar']
)连接到字符串(例如:
'baz'
)。您可能想做的是将单个参数包装在一个列表中,或者更简洁地说,将其作为原始列表的一部分:

(将其包装在列表中)

(使其成为原始列表的一部分

# SNIP
import subprocess
subprocess.call(['youtube-dl', '-f', Q, URL]) 

drop
shell=True
,否则将
-f
等传递到shell,而不是Unix上的
youtube dl
程序。使用列表参数几乎总是错误的,
shell=True
[“youtube dl-f”]
不正确。它应该是
[“youtube dl”,“-f”]
+1.另外,通常我会使用
check\u call()
:除非明确抑制错误,否则不应忽略错误。
# SNIP
import subprocess
subprocess.call(["youtube-dl", "-f "] + [Q] + [URL]) 
# SNIP
import subprocess
subprocess.call(['youtube-dl', '-f', Q, URL])