从flask或django调用命令行应用程序

时间:2017-03-13 21:47:54

标签: python django web flask

我有一个命令行工具,如下所示:

tool -o output -a authentication.txt  -i input.txt

(它将一些文件作为输入)

我想要做的是使用flask或django为这个命令行工具提供一个Web界面,因为该工具基于python。 那么你可以指导我如何调用该工具并从stdout获取结果! 此外,工具还有配置文件,我也想在网络界面中打开和编辑它。

我最初的想法是调用python子进程调用应用程序来获取它的标准输出但不知道它有多明智?s

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到! 我不知道你想做什么。但基本的例子是这样的。你提到它是python程序/应用程序。您可以将命令行工具作为包导入。如果它不是包,则将其打包https://packaging.python.org/。您作为参数传递的参数,您可以传入您的应用程序。在Flask你会做这样的事情。 伪app.py

import tool
@app.route("/")
def index():
    return render_template("index.html")

@app.route('/tool')
def tool(input):
auth = tool.auth()
input = tool.input(input)

return output

答案 1 :(得分:0)

假设Python 3.5:

import subprocess
res = subprocess.run(["tool", "-o", "output", "-a", "authentication.txt", "-i", "input.txt"])
res.stdout

在早期版本中,您可能会使用以下内容,这会在非零返回码上引发CalledProcessError

print(subprocess.check_output(
    "/usr/local/bin/spam bacon spam",
    stderr=subprocess.STDOUT,
    shell=True))

 # => EGGS AND SPAM!

使用不可靠(例如用户)输入时要小心运行命令,确保正确清理参数。请记住测试恶意输入,例如尝试逃避命令以运行不同的命令。

尝试确保执行命令的系统用户(在这种情况下通常是应用程序用户/ Web服务器用户)如果/当某些事情通过限制其权利而不可避免地通过时,可能会造成太多损失在机器上。