Python 类型错误:';str';不支持缓冲区接口
我正在用Python3开发一个图形界面,所以我找到了一些代码,可以帮助我向GRBL发送一个文件(gcode),但这段代码在Python2中。我试图修改程序以在python 3上工作Python 类型错误:';str';不支持缓冲区接口,python,string,Python,String,我正在用Python3开发一个图形界面,所以我找到了一些代码,可以帮助我向GRBL发送一个文件(gcode),但这段代码在Python2中。我试图修改程序以在python 3上工作 import serial import time # Open grbl serial port s = serial.Serial('/dev/ttyS0',115200) # Open g-code file f = open(r'/home/pi/Downloads/spinner.gcode') #
import serial
import time
# Open grbl serial port
s = serial.Serial('/dev/ttyS0',115200)
# Open g-code file
f = open(r'/home/pi/Downloads/spinner.gcode')
# Wake up grbl
s.write("\r\n\r\n".encode("utf8"))
time.sleep(2) # Wait for grbl to initialize
s.flushInput() # Flush startup text in serial input
# Stream g-code to grbl
for line in f:
l = line.strip() # Strip all EOL characters for streaming
print ('Sending: ' + l)
s.write(l + '\n') # Send g-code block to grbl
grbl_out = s.readline() # Wait for grbl response with carriage return
print( ' : ' + grbl_out.strip())
# Wait here until grbl is finished to close serial port and file.
raw_input(" Press <Enter> to exit and disable grbl.")
# Close file and serial port
f.close()
s.close()
导入序列号
导入时间
#打开grbl串行端口
s=serial.serial('/dev/ttyS0',115200)
#打开g代码文件
f=打开(r'/home/pi/Downloads/spinner.gcode')
#唤醒grbl
s、 写入(“\r\n\r\n”。编码(“utf8”))
时间。睡眠(2)#等待grbl初始化
s、 flushInput()#在串行输入中刷新启动文本
#将g代码流到grbl
对于f中的行:
l=line.strip()#为流媒体删除所有下线字符
打印('发送:'+l)
s、 写入(l+'\n')#将g代码块发送到grbl
grbl_out=s.readline()#等待带有回车符的grbl响应
打印(“:”+grbl_out.strip())
#在此处等待,直到grbl完成关闭串行端口和文件。
原始输入(“按下退出并禁用grbl”)
#关闭文件和串行端口
f、 关闭()
s、 关闭()
当我运行它时,它会显示一个错误:
TypeError:“str”不支持缓冲区接口
只是猜测,因为您没有显示堆栈跟踪,甚至没有显示生成错误的行。但我认为这是可以解决的:
s.write((l + '\n').encode("utf8"))
请添加一个完整的堆栈跟踪
s.write(“\r\n\r\n”).encode(“utf8”)
看起来不正确…是的,正确的语法是:s.write(“\r\n\r\n”).encode(“utf8”)),但它显示了相同的问题:(这个问题缺少或甚至没有回溯。导致错误的代码可能在您导入的串行
模块中。它不工作:(,TypeError:无法将“bytes”对象转换为strimplicitly@SkaouzMacac您确实需要报告(并注意您自己)哪一行生成了错误。在“无法隐式地将'bytes'对象转换为str”的情况下这可能是下面两行的+
操作。你可以通过说grbl_out=s.readline().decode('utf8')
@jez谢谢你,但现在的问题是:AttributeError'NoneType'对象没有属性'strip'@SkaouzMacac来避免它,除非你把完整的错误跟踪放在这个问题上,否则我们就瞎了。