Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';str';不支持缓冲区接口_Python_String - Fatal编程技术网

Python 类型错误:';str';不支持缓冲区接口

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') #

我正在用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')

# 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来避免它,除非你把完整的错误跟踪放在这个问题上,否则我们就瞎了。