当我在Windows命令提示符下运行python脚本时,它工作得非常好,但当它在Ubuntu上运行时,会抛出错误,即“JSON对象必须是str,而不是‘bytes’”。
为什么在调用函数“print_out”时对相同的输入(来自RabbitMQ API调用的结果)进行不同的处理,这是非常令人费解的。
下面是python脚本的代码片段:-
import urllib.request, urllib.error, urllib.parse, requests
import json, optparse
class http_worker:
def authentication(self, url, user, pw):
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, url, user, pw)
self.auth = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(self.auth)
urllib2.install_opener(opener)
def call_url(self, url, body_raw):
body = json.dumps(body_raw)
#
# urllib2 post since there is body
#
req = urllib2.Request(url, body, {'Content-Type': 'application/json'})
return urllib2.urlopen(req)
# THIS FUNCTION CALL IS THROWING ERROR
def print_out(my_json):
for item in my_json:
out = []
for _, val in sorted(item.get("properties").get("headers").items()):
out.append(str(val))
print(", ".join(out))
user = "guest"
pwd = "guest"
rabbit_host = "http://localhost:15672"
host_suffix = "/api/queues/%%2F/%s/get" %(rabbit_queue_name)
url = rabbit_host + host_suffix
body_raw = {"count":5000,"ackmode":"ack_requeue_false", "encoding":"auto","truncate":50000}
worker = http_worker()
worker.authentication(url, user, pwd)
res = worker.call_url(url, body_raw)
#result = json.loads(res.read())
print_out(json.loads(res.read()))
所以,这是python版本特定的错误,与环境无关。为了执行我的脚本,我使用python。exe(它让我进入python3),而不是Windows上Ubuntu上Bash中的python。正如查尔斯·达菲指出的那样,这要归功于他:-
坦率地说,str与bytes的区别根本不是JSON特有的。同样可能的是,在您的两个环境中有两个不同的Python版本(一个是python2,另一个是python3 f/e)查尔斯·达菲
我有一段非常简单的Java代码,在那里我尝试从Java连接到我的Oracle DB。 在Windows下一切正常,但当我尝试在Ubuntu上运行时,我得到了一个错误。 我读了很多书,也试过很多解决方法。这是我的代码: 当我运行它时,我收到一个错误: 连接失败Java.sql.sqlRecoverable异常:IO错误:网络适配器无法在oracle.jdbc.driver.T4CConnection
这个问题在下面的示例中重现。 } 据我所知,发生此异常是因为多个线程试图保存同一个对象。这就是我使用同步块的原因。 null null
我试图制作一个跨平台的JavaFX应用程序,它在Windows和OSX机器上工作得很好,但在Linux上不行。 jar是在Intellij思想中使用基本的JavaFX配置构建的。 有人帮忙吗?
我最近在Windows上运行的Ubuntu bash上安装并设置了rails作为Linux子系统。我能够顺利地启动rails,并在我的Windows C:/驱动器上创建一个新的rails应用程序。我尝试直接从postgresql.org/downloads/windows网站下载PSQL,但是遇到了一些问题,所以我取消了,然后按照本教程的安装PostgresQL部分进行操作。唯一的问题是,先前被取
这是我的密码: 我已经安装了Python3(MacOSX),并将其与virtualenv一起使用。这段代码在2.7中运行良好,但在python3中不起作用。5.它总是给出