【问题标题】:Twisted TypeError in sendLinesendLine 中的 Twisted TypeError
【发布时间】:2014-07-15 21:58:21
【问题描述】:

我正在使用python-RTSP 使用 Twisted 和 Python3 运行 RTSP。我正在尝试使用上述配置访问 youtube 链接的 RTSP 信息。我必须使用 Python3,因为我的剩余代码在 Python3 中。

我正在使用

发送命令
self.sendLine('%s %s RTSP/1.0' % (command, path))

Command 是 DESCRIBE 并且 Path 是 url

rtsp://r7---sn-a5m7zu7d.c.youtube.com/CiILENy73wIaGQlFHOtrHD-E8RMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp

我收到以下语句的错误:

File "/home/akshay_v/valuconnex-python/twisted/protocols/basic.py", line 637, in sendLine
        return self.transport.write(str(line + self.delimiter))
    builtins.TypeError: Can't convert 'bytes' object to str implicitly

self.delimiter = b'\r\n'
line is the *str* passed as argument in above statement.

如何让它工作?

【问题讨论】:

  • 它在使用的库中。当我尝试将其修改为字符串时,错误显示“数据不能是 unicode”
  • 你为什么不使用RTSPClient.sendCommand()而不是复制粘贴函数使用的代码
  • 其实RTSP.sendCommand()使用的是twisted/protocols/basic.py的sendLine()。上面错误中的那一行是 sendCommand() 传递的参数。

标签: python python-3.x twisted rtsp


【解决方案1】:

正如 Jean-Paul 所说,您不能使用 Python 3 来运行 python-RTSP。

如果您对此失败的确切性质感到好奇,那么问题在于transport.write 采用了bytes 对象。在与str 相同类型的 Python 2 上,在 Python 3 上它是它自己的类型。在 Python 2 上与 Python 3 的 str 类似的类型是 unicode,您不能将 unicode 写入套接字,因此您不能将其传递给 transport.write

但是,您在twisted.protocols.basic 中显示的那行代码看起来像是一个错误修改的 Twisted 版本;我在那个位置找不到曾经调用过str 的Twisted 版本。您是如何获得此版本的 Twisted 的?您是否尝试过升级到最新版本(撰写本文时为 14.0.0)?

【讨论】:

  • 感谢,已更新 Twisted(至 14.0.0)。并在使用sendLine 命令之前将字符串转换为字节。能够前行。感谢您的详细回答。
【解决方案2】:

python-RTSP 似乎尚未移植到 Python 3。尝试在 Python 2.7(或者甚至是 Python 2.6,正如它的 README 所建议的那样)上运行它。 Python 3 与 Python 2 不兼容,未移植到它的软件将无法工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多