【问题标题】:How to tell Flask path to a application binary如何告诉应用程序二进制文件的 Flask 路径
【发布时间】:2021-12-29 18:17:43
【问题描述】:

我希望能够通过 Flask 向我的空气净化器发送命令,这样我就可以在 webcore 中将其功能与我的家庭自动化一起使用。

这里是python sn-p

from flask import Flask
import subprocess
app = Flask(__name__)

@app.route('/status')

def my_command():
        cmd = 'airctrl --ipaddr 192.168.99.55 --protocol coap --mode S'
        p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        out,err = p.communicate()
        return out

if __name__ == "__main__" :
    app.run(host="192.168.99.45", port=5000, debug=True)

什么都会返回

FileNotFoundError: [Errno 2] No such file or directory: 'airctrl --ipaddr 192.168.99.55 --protocol coap --mode S': 'airctrl --ipaddr 192.168.99.55 --protocol coap --mode S'

我如何告诉flask,我们要找到“airctrl”?

我试过了

 cmd = '/usr/local/bin/airctrl', 'airctrl --ipaddr 192.168.99.55 --protocol coap --mode S'

它什么也不返回,但也不做任何事情。

Reallay 感谢您的帮助,正如您所见,我是一个完全的初学者,并且已经在谷歌上搜索了几个小时的解决方案。

谢谢,

托马斯

【问题讨论】:

  • 为什么不试试可执行文件的完整路径?

标签: python


【解决方案1】:

正如上面评论中提到的,一种解决方案是指定绝对路径。适应你的例子是这样的:

cmd = '/usr/local/bin/airctrl --ipaddr 192.168.99.55 --protocol coap --mode S'

另请阅读the Python documentation regarding Popen 和例如this SO question,它提供了使用 shell=True 的替代解决方案。

【讨论】:

    【解决方案2】:

    添加shell=True 对我有用。似乎我什至不知道到底要查找什么。所以感谢您指出正确的答案。这是端点现在的样子。

    @app.route('/sleep')
    
    def sleepmode():
            cmd = ["airctrl --ipaddr 192.168.99.55 --protocol coap --mode S"]
            p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
            out,err = p.communicate()
            return out
    

    只添加完整路径,我遇到了身份验证错误

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2015-04-17
      • 2023-03-11
      • 2011-09-28
      • 2016-05-05
      相关资源
      最近更新 更多