我正在尝试使用子进程库。
终端上的 $youtube-dl http://www.youtube.com/watch?v=co5gy_2uOEY
按预期工作,但IDLE中运行的以下代码片段似乎没有做任何事情。
> os.chdir('/home/andrew')
> line = 'http://www.youtube.com/watch?v=co5gy_2uOEY'
> yt_dl = subprocess.call(['youtube-dl',line])
1
或者,我也尝试过:
> yt_dl = subprocess.Popen(['youtube-dl',line])
但是返回1
并且也没有做任何事情。这里发生了什么?
编辑:
使用双引号包装行使其工作,但现在此子进程挂起。我尝试进行以下更改,但它再次无效:
yt_dl = ["youtube-dl","http://www.youtube.com/watch?v=co5gy_2uOEY"]
x = subprocess.Popen(yt_dl, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
stdout, stderr = x.communicate()
答案 0 :(得分:1)
不确定为什么没有收到关于http
未定义的错误,但您应该使用:
line = "http://www.youtube.com/watch?v=co5gy_2uOEY"
将字符串传递给subprocess.call
答案 1 :(得分:1)
因为它有效而挂起。您可以检查从idle
输出youtube-dl
运行的终端。
答案 2 :(得分:-2)
你试过添加shell = True吗? (虽然这通常是不鼓励的。)
yt_dl = subprocess.Popen([' youtube-dl',line] shell = True)