我想编写一个脚本来打开现金抽屉,使用串行设备(带USB),而不是每次打印机打印时打开它(例如,在信用卡付款时,不需要打开现金抽屉)。
它应该通过Ajax调用基于Flask的网站(整个网站将充当ajax接收器来执行python脚本)。
Flask网站正在运行,其他脚本运行没有问题,这就是为什么我在这里只显示主脚本的有趣部分:
...
@app.route("/cashdrawer")
def cashdrawer():
import cash_drawer_open
return "open ?" # website output
...
现金抽屉开启者cash_drawer_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设备通话?感谢
答案 0 :(得分:1)
你的错误是假设导入正在执行代码。它只是第一次,之后一个import语句只给你一个缓存的模块实例。
通过三个简单的步骤重构您的代码:
cash_drawer_open
中
进入功能 cash_drawer_open
导入到其所属模块的顶部