为什么subprocess popen给出typeError

时间:2014-01-23 14:20:39

标签: python subprocess popen

当我尝试使用subprocess.Popen

进行git push时
        msg, err = subprocess.Popen('git push', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        print msg.stdout.read()

我得到错误说:TypeError:'Popen'对象不可迭代

3 个答案:

答案 0 :(得分:2)

你将它视为可迭代:

msg, data = ..

这将尝试循环对象并将项目分配给msgdata。由于返回的对象不是可迭代的,因此您有错误。

subprocess.Popen构造函数返回Popen个对象。也许你想使用Popen.communicate?它确实返回一个元组stdoutdata, stderrdata

答案 1 :(得分:1)

Popen()不是可迭代的,而是Popen实例。

当您说a,b = thing时,您认为thing是一个元组(或其他可迭代的),可以映射到(a, b)

答案 2 :(得分:1)

代码

msg, err = X

迭代而不是X,并将其第一个元素分配给msg,将其第二个元素分配给err(并检查X是否完全正确2个元素)。

由于Popen实例不是可迭代的,因此您的代码会抛出“'Popen'对象不可迭代”。