我对Python编程真的很陌生,我正在尝试为树莓pi构建一个flask web应用程序,该应用程序将通过串行端口从文本文件中DNC g代码发送到一个旧的HASS数控铣削机。磨机使用XMODEM协议。我一直在关注文档https://pypi.org/project/xmodem/.
当我从命令行运行python3 dncPi.py
时,我得到以下错误:
File "dncPi.py", line 2, in <module>
from xmodem import XMODEM
ModuleNotFoundError: No module named 'xmodem'
运行pip3 install xmodem
显示:
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: xmodem in /home/pi/.local/lib/python3.7/site-packages (0.4.6)
我已经检查了/home/pi/.local/lib/python3.7/site-packages
是python3路径的一部分,带有:
python3 -c "import sys; print(':'.join(x for x in sys.path if x))"
这是我的dncPi.py代码:
import serial
from xmodem import XMODEM
from flask import Flask, render_template, request
ser = serial.Serial('/dev/ttyAMA0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0)
def getc(size):
return ser.read(size) or None
def putc(data):
return ser.write(data)
modem = XMODEM(getc, putc)
app = Flask(__name__)
@app.route("/")
def index():
print(request.method)
if request.method == 'POST':
if request.form.get('Send NC') == 'Send NC':
filename = request.form.get('Filename')
stream = open('/mnt/CNC/DNC/' + filename + '.nc', 'rb')
status = modem.send(stream, retry=8)
if status:
print(filename + ".nc Sent")
else:
print(filename + ".nc Send Failure")
elif request.form.get('Abort') == 'Abort':
modem.abort()
print("Aborted")
else:
# pass # unknown
return render_template("index.html")
elif request.method == 'GET':
# return render_template("index.html")
print("No Post Back Call")
return render_template("index.html")
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)
三元组正确无误。我没想到须藤会改变环境。sudo pip3 install xmodem
修复了它。