使用flask运行多个python函数 [英] Run multiple python functions using flask

查看:57
本文介绍了使用flask运行多个python函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

第二次更新

快到了!!但是收到ValueError:试图使用未打开的端口"

<块引用>

文件c:\Python27\lib\site-packages\flask\app.py",第 1701 行,在 __call__ 中返回 self.wsgi_app(environ, start_response)文件c:\Python27\lib\site-packages\flask\app.py",第 1689 行,在 wsgi_app 中响应 = self.make_response(self.handle_exception(e))文件c:\Python27\lib\site-packages\flask\app.py",第 1687 行,在 wsgi_app 中响应 = self.full_dispatch_request()文件c:\Python27\lib\site-packages\flask\app.py",第 1360 行,在 full_dispatch_request 中rv = self.handle_user_exception(e)文件c:\Python27\lib\site-packages\flask\app.py",第 1358 行,在 full_dispatch_request 中rv = self.dispatch_request()文件c:\Python27\lib\site-packages\flask\app.py",第 1344 行,在 dispatch_request 中返回 self.view_functions[rule.endpoint](**req.view_args)文件G:\OverAir\arduino\server.py",第 19 行,light_offboard.output([pin])输出中的文件G:\OverAir\arduino\arduino.py",第 16 行self.__sendData(len(pinArray))文件G:\OverAir\arduino\arduino.py",第 56 行,在 __sendDatawhile(self.__getData()[0] != "w"):文件G:\OverAir\arduino\arduino.py",第 61 行,在 __getData 中返回 self.serial.readline().rstrip('\n')文件c:\Python27\lib\site-packages\serial\serialwin32.py",第 221 行,读取如果不是 self.hComPort:引发 portNotOpenErrorValueError:尝试使用未打开的端口

更新

下面@Blender 回答中的代码可能是正确的.现在的问题我遇到的是 "SerialException: 无法打开端口COM5:[错误 5] 访问被拒绝."

但是,如果我单独运行我的原始脚本、on.py 或 off.py 脚本,它工作正常......我不明白新代码是如何工作的......除非它尝试打开 COM5 两次??

结束更新

我尝试使用 Flask 运行多个 python 函数或单独的 .py 脚本;以便生成单独的 URL.只是试图打开/关闭在本地运行的 Arduino.

例如,我有 on.py 和 off.py,想构建 sever.py.所以,当我打开 127.0.0.1:5000/on 它运行 on.py,类似地 127.0.0.1:5000/off 运行 off.py,

几个小时后,我决定将两个.py函数都添加到server.py中,但当然不行……我想我只是不明白参数的用法.

真的提前谢谢你!

## 打开与 Arduino 的串行连接.从时间导入睡眠从 arduino 导入 Arduino从烧瓶进口烧瓶b = Arduino("COM5",9600)引脚 = 13数量 = 5ON = Flask("Light_ON")OFF = Flask("Light_OFF")def LightON():#将输出引脚声明为列表/元组b.输出([引脚])b.setHigh(pin)b.关闭()返回灯亮"def LightOFF():#将输出引脚声明为列表/元组b.输出([引脚])b.setLow(pin)返回灯已关闭"@ON.route('/ON')@OFF.route('/OFF')ON.run()OFF.run()//我知道这不会运行,只是不确定如何包含它.

解决方案

这样的事情应该可行:

from arduino import Arduino从烧瓶进口烧瓶app = Flask('light_control')板 = Arduino('COM5', 9600)引脚 = 13@app.route('/on')def light_on():board.output([pin])board.setHigh(pin)board.close()返回灯亮"@app.route('/关闭')def light_off():board.output([pin])board.setLow(pin)# board.close() ???返回灯已关闭"如果 __name__ == '__main__':app.debug = True应用程序运行()

2nd UPDATE

Almost there!! But getting a "ValueError: Attempting to use a port that is not open"

File "c:\Python27\lib\site-packages\flask\app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)

File "c:\Python27\lib\site-packages\flask\app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))

File "c:\Python27\lib\site-packages\flask\app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()

File "c:\Python27\lib\site-packages\flask\app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)

File "c:\Python27\lib\site-packages\flask\app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()

File "c:\Python27\lib\site-packages\flask\app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)

File "G:\OverAir\arduino\server.py", line 19, in light_off
board.output([pin])

File "G:\OverAir\arduino\arduino.py", line 16, in output
self.__sendData(len(pinArray))

File "G:\OverAir\arduino\arduino.py", line 56, in __sendData
while(self.__getData()[0] != "w"):

File "G:\OverAir\arduino\arduino.py", line 61, in __getData
return self.serial.readline().rstrip('\n')

File "c:\Python27\lib\site-packages\serial\serialwin32.py", line 221, in read
if not self.hComPort: raise portNotOpenError

ValueError: Attempting to use a port that is not open

UPDATE

The code from @Blender answer below is probably correct. The issue now I am having is I'm getting "SerialException: could not open port COM5: [Error 5] Access is denied."

However, if I run my original, on.py or off.py script individually, it works fine...I don't see how the new code is not working...unless does it try to open COM5 twice??

END UPDATE

I trying to run multiple python functions, or separate .py scripts, using Flask; in order to generate separate URLs. Just trying to turn the Arduino ON/OFF running it locally.

For example, I have on.py and off.py and want to build sever.py. So, when I open 127.0.0.1:5000/on it runs on.py, similarly 127.0.0.1:5000/off runs off.py,

After a few hours, I just decided to add both .py functions into the server.py, but of course it doesn't work...I think I just don't understand the parameters usage.

Really thank you in advance!

## Open a serial connection with Arduino.

from time import sleep
from arduino import Arduino

from flask import Flask


b = Arduino("COM5",9600)
pin = 13
num = 5

ON = Flask("Light_ON")
OFF = Flask("Light_OFF")


def LightON():
    #declare output pins as a list/tuple
    b.output([pin])
    b.setHigh(pin)
    b.close()
    return 'Light is ON'

def LightOFF():
    #declare output pins as a list/tuple
    b.output([pin])
    b.setLow(pin)
    return 'Light is OFF'

@ON.route('/ON')
@OFF.route('/OFF')

ON.run()
OFF.run()  //I know this doesn't run, just not sure how to include it.

解决方案

Something like this should work:

from arduino import Arduino
from flask import Flask

app = Flask('light_control')
board = Arduino('COM5', 9600)
pin = 13

@app.route('/on')
def light_on():
    board.output([pin])
    board.setHigh(pin)
    board.close()

    return 'Light is ON'

@app.route('/off')
def light_off():
    board.output([pin])
    board.setLow(pin)
    # board.close() ???

    return 'Light is OFF'

if __name__ == '__main__':
    app.debug = True
    app.run()

这篇关于使用flask运行多个python函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆