为什么我的子进程调用失败?

时间:2013-02-21 23:57:30

标签: python subprocess youtube-dl

我正在尝试使用子进程库。

终端上的

$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()

3 个答案:

答案 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)