我是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”]
答案 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)。此处stderr
为None
,因为您尚未附加管道。然后,您尝试使用期望None
或json.loads()
对象的str
来解析buffer
。
如果您想要stderr
输出,则必须将stderr=subprocess.PIPE
添加到Popen
构造函数调用中。