Как отправить несколько команд в запросе от колбы клиенту? - PullRequest
0 голосов
/ 30 мая 2019

Я только начал работать с флягой и настроил флеш-сервер. Идея в том, что пользователь увидит веб-интерфейс, введет через него некоторые аргументы и нажмет кнопку запуска Затем аргументы будут переданы на сервер, а взамен сервер должен открыть командную строку в системе пользователя и выполнить следующее: -

  1. pushd path
  2. запустить скрипт, расположенный по пути, с аргументами, предоставленными пользователем через пользовательский интерфейс python script.py -a arg1 -a arg2 (просто пример)

фляга серверная

from flask import Flask, render_template, request
import subprocess
app = Flask(__name__)

@app.route("/")
def home():
    return render_template("home.html")

@app.route("/person", methods =['POST','GET'])
def person():
    if request.method == 'POST':
        data = request.form
        return subprocess.call([r'C:\\flask_sample\\matrix.bat'])

if __name__ == "__app__":
    app.run(debug=True)

home.html (содержит форму, из которой должны быть получены аргументы)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="../static/css/bootstrap.min.css">
    <title>Crashman</title>
</head>
<body>
    <div class="container-fluid">
        <div class="jumbotron jumbotron-fluid"><h1 class="text-center display-3 text-wrap">Crashman</h1></div>
    </div>
    <div class="container-fluid">
        <form action="http://localhost:5000/person" method="POST">
        <div class="row form-group" >
            <div class="col-3"><label for="target_chipset">Target-chipset</label></div>
            <div class="col-9"><input type="text" name="target" id="target_chipset" class="form-control" placeholder="Enter target number E.g. 845"></div>
        </div>
        <div class="row form-group">
            <div class="col-3"><label for="ram_dump">Ram dump location</label></div>
            <div class="col-9"><input type="text" name="dump" id="ram_dump" class="form-control" placeholder="Enter Ramdump path (including the dump file)"></div>
        </div>
        <div class="row form-group">
            <div class="col-3"><label for="output">Output location</label></div>
            <div class="col-9"><input type="text" name="Output" id="output" class="form-control" placeholder="Enter the path where the report will be generated"></div>
        </div>
        <div class="row form-group">
            <div class="col-3"><label for="build">DSP Build location</label></div>
            <div class="col-9"><input type="text" name="Build" id="build" class="form-control" placeholder="Enter the DSP build path"></div>
        </div>
        <div class="row form-group">
            <div class="col-3"><label for="elf">Elf location</label></div>
            <div class="col-9"><input type="text" name="Elf" id="elf" class="form-control" placeholder="Enter the elf path"></div>
        </div>
        <div class="row form-group">
            <div class="col-3"><label for="vmlinux">Vmlinux location(smmu64) </label><small>Optional</small></div> 
            <div class="col-9"><input type="text" name="Vmlinux" id="vmlinux" class="form-control" placeholder="Enter the vmlinux path"></div>
        </div>
        <div class="row form-group">
            <div class="col"><button class="btn btn-success" type="submit">Run</button></div>
        </div>
    </form>
    <div class="col"><button class="btn btn-primary" onclick="create_command();">Get Command</button></div>
    </div>
    <div class="container-fluid">
            <div class="card text-center">
                    <div class="card-header">

                    </div>
                    <div class="card-body">
                      <h5 class="card-title">Your command</h5>
                      <p class="card-text" id="appended_command"></p>
                    </div>
                    <div class="card-footer text-muted">

                    </div>
            </div>
    </div>
</body>
<script type="text/javascript">
function create_command()
{
    if(document.getElementById('vmlinux').value=="")
    {
        document.getElementById('appended_command').innerHTML = "python adspcrashman.py -t " + document.getElementById('target_chipset').value + " -d " 
        + document.getElementById('ram_dump').value + " -o " + document.getElementById('output').value + " -b " 
        + document.getElementById('build').value + " -e " + document.getElementById('elf').value;
    }
    else
    {
        document.getElementById('appended_command').innerHTML = "python adspcrashman.py -t " + document.getElementById('target_chipset').value + " -d " 
        + document.getElementById('ram_dump').value + " -o " + document.getElementById('output').value + " -b " 
        + document.getElementById('build').value + " -e " + document.getElementById('elf').value + " -smmu64 "
        +document.getElementById('vmlinux').value;
    }  
}
</script>
</html>

Прямо сейчас код фляги просто запустит файл .bat (найден в сети https://datatofish.com/batch-file-from-python/), который в настоящее время находится в той же системе, что и прямой путь. Но запрос на возврат должен выполнить либо две команды упомянутый выше или отправьте пользователю файл bat (содержащий две команды), чтобы запустить его в своей системе. Что я могу сделать в этой ситуации?

1 Ответ

0 голосов
/ 17 июня 2019

Кажется, что работает следующий код, по крайней мере, для размещения сервера на локальном хосте.

@app.route("/person", methods =['POST','GET'])
def person():
    if request.method == 'POST':
            f = open ("crashman.bat","w+")
            f.write("@echo off\r\n")
            f.write("PUSHD \\\\rover\hyd_dspfw\ADSP_Tools\TriageTeam\Crashman\Latest\r\n")
            if request.form['Vmlinux'] == '':
                f.write("python adspcrashman.py -t " + request.form['target']+ " -d " + request.form['dump'] + " -o " + request.form['Output'] + " -b " + request.form['Build'] + " -e " + request.form['Elf'])
            else:
                f.write("python adspcrashman.py -t " + request.form['target']+ " -d " + request.form['dump'] + " -o " + request.form['Output'] + " -b " + request.form['Build'] + " -e " + request.form['Elf'] + " -smmu64 " + request.form['Vmlinux'])
            f.close()
            return subprocess.call([r'crashman.bat'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...