预期的字符串或缓冲区Python

时间:2013-11-24 12:17:34

标签: python string exception buffer

我是python的新手,这是我第一次真正写它。 我正在创建一个程序来获取Twitch.tv流的视图数量,但是当我调用此函数时,我收到错误预期字符串或缓冲区Python

 def getURL():
  output = subprocess.Popen(["livestreamer", "twitch.tv/streamname", "-j"], stdout=subprocess.PIPE).communicate()[1]
  return json.loads(output)["streams"]["worst"]["url"]

我从这里调用函数:

urls = []

urls.append(getURL())

我做错了什么?我一直试图想出这个问题多年......如果有人知道如何解决这个问题,那么我将是最幸福的人;)

提前致谢。

编辑:

这是我的所有代码。

import requests
import subprocess
import json
import sys
import threading
import time

urls = []
urlsUsed = []

def getURL():
output = subprocess.Popen(["livestreamer", "twitch.tv/hemzk", "-j"],       stdout=subprocess.PIPE).communicate()[1]
return json.loads(output)["streams"]["worst"]["url"]

def build():

global numberOfViewers

  urls.append(getURL())

我收到错误返回json.loads(输出)[“streams”] [“最差”] [“url”]

1 个答案:

答案 0 :(得分:0)

更改

output = subprocess.Popen(["livestreamer", "twitch.tv/streamname", "-j"],
                          stdout=subprocess.PIPE).communicate()[1] 

output = subprocess.Popen(["livestreamer", "twitch.tv/streamname", "-j"],
                          stdout=subprocess.PIPE).communicate()[0] 

(将1更改为0)。

以下是您问题的更详细说明。 Popen.communicate返回元组stdout, stderr。在这里,看起来您对stdout(索引0)感兴趣,但您正在挑选stderr(索引1)。此处stderrNone,因为您尚未附加管道。然后,您尝试使用期望Nonejson.loads()对象的str来解析buffer

如果您想要stderr输出,则必须将stderr=subprocess.PIPE添加到Popen构造函数调用中。