我想写一个脚本来打开现金抽屉,使用串行设备(带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设备通话吗?谢谢
发布于 2017-10-12 01:37:46
你的错误是假设导入是在执行代码。这只是第一次,之后的import语句只给你一个缓存的模块实例。
因此,用三个简单的步骤重构你的代码:
cash_drawer_open中的实际逻辑(除导入之外的任何内容)放入一个函数cash_drawer_open导入放到它所属的模块顶部<代码>G29
https://stackoverflow.com/questions/46694275
复制相似问题