从Python通过串行端口发送文件

从Python通过串行端口发送文件,python,raspberry-pi,Python,Raspberry Pi,我正试图通过串行端口发送一个文件(本例中为.jpg图像) 目前,它通过调用外部脚本工作: subprocess.Popen(['./sendFile.sh','myImage.jpg']).communicate() 其中sendFile.sh是: cp /home/pi/$1 /dev/ttyAMA0 这种方法可行,但不知何故不稳定。有时我的Python程序在传输文件后停止 我想知道是否有一种方法可以在Python中实现这一点,而不是调用脚本寻求帮助?我搜索了XMODEM,但似乎两端都必须

我正试图通过串行端口发送一个文件(本例中为.jpg图像)

目前,它通过调用外部脚本工作:

subprocess.Popen(['./sendFile.sh','myImage.jpg']).communicate()
其中
sendFile.sh
是:

cp /home/pi/$1 /dev/ttyAMA0
这种方法可行,但不知何故不稳定。有时我的Python程序在传输文件后停止


我想知道是否有一种方法可以在Python中实现这一点,而不是调用脚本寻求帮助?我搜索了XMODEM,但似乎两端都必须安装它。我将图像发送到GPRS芯片,该芯片不允许我修改其上的任何代码。因此,在接收端安装某些东西是不可能的。

您可以使用
os.open
直接打开一个dev:

import serial
s = serial.Serial("/dev/ttyAMA0")
s.write(open("target.txt","rb").read())
f = os.open('/dev/ttyAMA0', os.O_RDWR)
f.write(open("myImage.jpg").read))
f.close()

您是否尝试打开设备专用文件(
/dev/ttyam0
)并写入它?我确实进行了一些初始化以设置端口和波特率,我可以通过
串行写入字符串。写入(someString)
。大概我可以像这样传输文件,但我找不到语法。
shutil.copyfileobj(open('/home/pi/myImage.jpg','rb'),serial_obj)
在您的情况下有效吗?(注意:与-statement一起使用
,并在实际代码中关闭文件)。