繁体   English   中英

预期的字符串或缓冲区Python

[英]Expected string or buffer Python

我真的是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(output)[“ streams”] [“ worst”] [“ url”]时遇到了错误

更改

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 ,因为您尚未将管道连接到该管道。 然后,您尝试使用json.loads()解析None ,该str需要一个str或一个buffer对象。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM