python3 flask pyserial脚本只工作一次
我想编写一个脚本来打开现金抽屉,使用串行设备(带USB),而不是每次打印机打印时都打开它(例如,在信用卡付款时,不需要打开现金抽屉) 它应该通过对基于Flask的网站的Ajax调用来工作(整个网站应该充当Ajax接收器来执行python脚本) Flask网站正在运行,其他脚本正在运行,没有问题,这就是为什么我在这里只显示主脚本中有趣的部分:python3 flask pyserial脚本只工作一次,python,ajax,flask,pyserial,Python,Ajax,Flask,Pyserial,我想编写一个脚本来打开现金抽屉,使用串行设备(带USB),而不是每次打印机打印时都打开它(例如,在信用卡付款时,不需要打开现金抽屉) 它应该通过对基于Flask的网站的Ajax调用来工作(整个网站应该充当Ajax接收器来执行python脚本) Flask网站正在运行,其他脚本正在运行,没有问题,这就是为什么我在这里只显示主脚本中有趣的部分: ... @app.route("/cashdrawer") def cashdrawer(): import cash_drawer_ope
...
@app.route("/cashdrawer")
def cashdrawer():
import cash_drawer_open
return "open ?" # website output
...
现金抽屉开启器cash\u drawer\u open.py
看起来像这样
#!/usr/bin/python3
import serial
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate=300,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
xonxoff=serial.XOFF,
rtscts=False,
dsrdtr=False
)
ser.write(bytes([0, 4]))
ser.flush() # something
ser.flushInput() # I played
ser.flushOutput() # around
ser.close() # with
# exit() # etc.
# quit() # etc.
print ("open ?") # terminal output
问题是,在Flask服务器启动并第一次调用脚本之后,抽屉只打开一次。同一网站的每一次呼叫都不会在终端中返回open?
,抽屉保持平静。唯一的问题是终端响应
192.168.178.29 - - [11/Oct/2017 18:31:56] "GET /cashdrawer HTTP/1.1" 200 -
192.168.178.29 - - [11/Oct/2017 18:31:58] "GET /cashdrawer HTTP/1.1" 200 -
192.168.178.29 - - [11/Oct/2017 18:32:03] "GET /cashdrawer HTTP/1.1" 200 -
一次又一次
我还尝试用参数调用它,比如更改时间戳
http://myserver/cashdrawer?t=12765435664543
但是没有成功
你知道我如何在每次呼叫该地址时与USB设备通话吗?谢谢您的错误是假定导入正在执行代码。这只是第一次,之后import语句只会将缓存的模块实例传递给您 因此,用三个简单的步骤重构代码:
cash\u drawer\u open
转化为函数现金\u抽屉\u打开
放在它所属模块的顶部好的,现在我在主脚本的顶部有了
def import\u cashdrawer():import cash\u drawer\u open
,并且@app.route(“/cashdrawer”)def cashdrawer():import\u cashdrawer()在route函数中返回“open now?”
,但结果相同,它只工作一次。我在这里不能得到什么?啊。。。我明白了。。。瞬间。让我完全困惑:当我从平板电脑浏览器调用页面时,它就像预期的那样工作。当我使用带有Safari或FF的MacBook时,页面会一直挂起/冻结,直到我从平板电脑再次调用该页面。然后它发射两次。。。啊!找到答案:像这样激活线程app.run(host='0.0.0.0',threaded=True,debug=True)