从烧瓶或Django调用命令行应用程序



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

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

(它获取一些文件作为输入)

我想做的是使用烧瓶或django为此命令行工具提供一个Web界面,因为该工具基于Python。因此,您能否指导我如何调用该工具并从Stdout获得其结果!另外,工具具有配置文件,我也想在Web界面中打开和编辑。

我最初的想法是打电话给Python Subprocess致电该应用程序以获取其Stdout,但不知道它是多么明智的?S

有很多方法可以做到!我不知道你要做什么。但是基本的例子就是这样。您提到这是Python程序/应用程序。您可以将命令行工具作为软件包导入。如果不是包装,则包装https://packaging.python.org/。您作为参数传递的参数,您可以通过应用程序传递。在烧瓶中,您会做这样的事情。 pseudo 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

假设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服务器用户),如果/何时不可避免地会通过限制其权利,则不能太多。机器。

最新更新