从 Python 2.7 更改为 Python 3.7 数据后得到一个额外的字母?

我正在开发一个程序,该程序从通过 WiFi 发送的 Android 应用程序接收字符串,该程序最初是为 Python 2.7 编写的,但在添加了一些附加功能后,我将其更改为 Python 3.7。然而,在做出这种改变之后,我的数据前面多了一个字母,我终究无法弄清楚为什么会这样。


这是我的代码片段,这是一个非常简单的 if 语句,用于查看从 Android 应用程序发送了哪个命令并使用该命令控制 Raspberry Pi (4) cam (v.2)。


这部分设置连接并等待查看我发送的命令。


isoCmd = ['auto','100','200','300','400','500','640','800']


HOST = ''

PORT = 21567

BUFSIZE = 1024

ADDR = (HOST,PORT)

brightness = 50

timelapse = 0



tcpSerSock = socket(AF_INET, SOCK_STREAM)

tcpSerSock.bind(ADDR)

tcpSerSock.listen(5)


while True:

        print ('Waiting for connection')

        tcpCliSock,addr = tcpSerSock.accept()

        try:

                while True:

                        data = ''

                        brightness = ' '

                        data = tcpCliSock.recv(BUFSIZE)

                        dataStr = str(data[1:])

                        print ("Here's data ",dataStr)

                        if not data:

                                break

                        if data in isoCmd:

                                if data == "auto":

                                        camera.iso = 0

                                        print ('ISO: Auto')

                                else:

                                        camera.iso = int(data)

                                        print ('ISO: '), data

当我启动程序时,这就是我所看到的:


Waiting for connection

#If I send command '300'

Here's data b'300'

Here's data b''

Waiting for connection

我不确定为什么会有多余的东西b''来自。我通过在数组中的每个项目的开头添加“b”来测试代码,它适用于我定义的任何命令,而不适用于任何控制 Pi 相机的命令,因为开头没有额外的 b。(这有意义吗?)我的意思是,我知道我可以毫无问题地发送命令,只是不确定如何去掉多余的字母。如果有人能给我一些建议,那就太好了。感谢您的帮助。


素胚勾勒不出你
浏览 157回答 2
2回答

一只萌萌小番薯

字节串由 b 前缀表示。虽然您可以在打印输出中看到字符串,但它们本质上是字节。要从中获取普通字符串,decode函数可以提供帮助。dataStr.decode("utf-8")

森栏

b'data'仅表示引号内的数据已以字节形式接收,如其他答案中所述,您必须对其进行解码才能以decode('utf-8')字符串形式获取它。我已经在下面更新了您的程序,以兼容 v3.7+from socket import *isoCmd = ['auto','100','200','300','400','500','640','800']HOST = ''PORT = 21567BUFSIZE = 1024ADDR = (HOST,PORT)brightness = 50timelapse = 0tcpSerSock = socket(AF_INET, SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)while True:    print ('Waiting for connection')    tcpCliSock,addr = tcpSerSock.accept()    try:        while True:            data = ''            brightness = ' '            data = tcpCliSock.recv(BUFSIZE).decode('utf-8')            print ("Here's data "+data)            if not data:                break            if data in isoCmd:                if data == "auto":                    camera.iso = 0                    print ('ISO: Auto')                else:                    camera.iso = int(data)                    print ('ISO: '+ data)    except Exception as e:        print(e)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python