我有一个命令行工具,如下所示:
tool -o output -a authentication.txt -i input.txt
(它将一些文件作为输入)
我想要做的是使用flask或django为这个命令行工具提供一个Web界面,因为该工具基于python。 那么你可以指导我如何调用该工具并从stdout获取结果! 此外,工具还有配置文件,我也想在网络界面中打开和编辑它。
我最初的想法是调用python子进程调用应用程序来获取它的标准输出但不知道它有多明智?s
答案 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服务器用户)如果/当某些事情通过限制其权利而不可避免地通过时,可能会造成太多损失在机器上。