使用pyserial和python 3.4通过串行发送二进制文件

使用pyserial和python 3.4通过串行发送二进制文件,python,file,binary,pyserial,transfer,Python,File,Binary,Pyserial,Transfer,我正在尝试使用python在windows中通过串行COM端口发送二进制文件,然后将相同的流写入文件。本质上,我试图复制文件,但由于这不是我的最终目标,我不想使用shutil或其他复制功能。我有一个脚本打算通过COM端口发送文件,还有一个脚本充当侦听器和文件编写器。sender脚本似乎以二进制文件的形式发送文件,但我在侦听器脚本方面遇到了问题,特别是在正确输出文件方面。我已经在下面发布了我的脚本。我从“发送方”发送的二进制流是否正确,如何更改“侦听器”以正确写入文件 听众: from seria

我正在尝试使用python在windows中通过串行COM端口发送二进制文件,然后将相同的流写入文件。本质上,我试图复制文件,但由于这不是我的最终目标,我不想使用shutil或其他复制功能。我有一个脚本打算通过COM端口发送文件,还有一个脚本充当侦听器和文件编写器。sender脚本似乎以二进制文件的形式发送文件,但我在侦听器脚本方面遇到了问题,特别是在正确输出文件方面。我已经在下面发布了我的脚本。我从“发送方”发送的二进制流是否正确,如何更改“侦听器”以正确写入文件

听众:

from serial import Serial

def bytes_from_file(filename, chunksize=8192):
    with open(filename, "rb") as f:
        while True:
            chunk = f.read(chunksize)
            if chunk:
                for b in chunk:
                    yield b
            else:
                break

def sendfile():
    ser = Serial("COM5", 115200, timeout=30, writeTimeout=0)
    filename = "c:\\temp\\savetestfile.txt"
    # wait for the "Sendfile" command over serial
    h = b''
    while h == b'':
        h = ser.read(ser.inWaiting())
    h = h.decode("utf-8")

    #respond with "y" if "sendfile" recieved to start data stream
    if h == "sendfile":
        ser.write(b'y')
    with open(filename, "wb") as f:
        while True:
            b=ser.read(1)
            print (b)
            if b: 
                n=f.write(b)
            else: break

if __name__ =="__main__":

    sendfile()
发件人:

from serial import Serial 

def bytes_from_file(filename, chunksize=8192):
    with open(filename, "rb") as f:
        while True:
            chunk = f.read(chunksize)
            if chunk:
                for b in chunk:
                    yield b
            else:
                break


def sendfile():
    #com = getCOMPortInfo()
    ser = Serial("COM2", 115200, timeout=10, writeTimeout=0)
    filename = askopenfilename(title="Stuff", initialdir="C:\\")
    #if filename is "":
    #   exit()
    ser.write(b"sendfile")
    ok = ""
    #while True:te

    h = ser.read()
    ok = ok + h.decode("utf-8")
    if ok is "y":
        print("yes!")
        for b in bytes_from_file(filename):
            #b = str(b).encode()
            print(b)
            ser.write(b)
    else:
        print ("Failure")
    ser.close()



# example:

if __name__ =="__main__":


    print(sendfile())

对于仍在问这个问题的人,我从来没有找到一个好的答案。如果您在旅行中遇到这样的问题,请随时提出建议。最后我重新设计了我的设计,这样就不需要发送文件了,但是如果可能的话,我仍然想知道如何去做。对于那些仍然在问这个问题的人,我从来没有找到一个好的答案。如果您在旅行中遇到这样的问题,请随时提出建议。最后,我重新设计了我的设计,这样就不需要发送文件了,但如果可能的话,我仍然想知道怎么做。