возвращение значений внутри функции - PullRequest
0 голосов
/ 11 мая 2019

У меня есть цикл по Python через пост json и подключение к сетевому устройству.Все это прекрасно работает, но я не могу вернуться к почтальону клиента JSON.Python 3. 4 колбы.Я пробовал много разных решений.Все, что я пытаюсь сделать, - это возвращать результаты моих команд отправки netmiko

from flask import Flask, jsonify, request
import netmiko
from netmiko.ssh_autodetect import SSHDetect
from netmiko.ssh_exception import NetMikoTimeoutException
import time
import gevent

app = Flask(__name__)

@app.route('/myuri', methods=['GET','POST', 'DELETE'])

def post():
    # Authentication
    headers = request.headers
    auth = headers.get("header key")
    if auth == 'my key':

        def firewall(command):
            src_a = command[0]
            src_p = command[1]
            dst_a = command[2]
            dst_p = command[3]
            p_col = command[4]
            p_show = command[5]
            p_push = command[6]

            ip = "1.1.1.1"
            username = "bla"
            password = "bla"
            device = {"device_type": "autodetect", "host": ip,
                       "username": username, "password": password}

            while True:
                try:
                    guesser = SSHDetect(**device)
                    best_match = guesser.autodetect()
                    print(best_match)
                    if "None" in str(best_match):
                        continue
                    if "true" in str(p_show) and "juniper_junos" in 
                    str(best_match):
                        device["device_type"] = best_match
                        connection = netmiko.ConnectHandler(**device)
                        time.sleep(1)
                        connection.enable()
                        resp = connection.send_command('show 
           configuration | display json | match ' + str(src_a))
                        resp1 = connection.send_command('show 
           configuration | display json | match ' + str(src_p))
                        resp2 = connection.send_command('show 
           configuration | display json | match ' + str(dst_a))
                        resp3 = connection.send_command('show 
            configuration | display json | match ' + str(dst_p))
                        connection.disconnect()
                        time.sleep(1)
                        returns = resp, resp1, resp2, resp3
                        print(returns) # this prints fine !!!!!
                        return return # Can't  return back !!!!!!

                except NetMikoTimeoutException:
                    return "Timeout Error" ### Note can't return this!

        commands = []
        data = request.get_json(force=True)
        for x in data["firewall"]:
            if 'SourceAddress' in x:
                commands.append((x['SourceAddress'], x['SourcePort'], 
                x['DestinationAddress'], x['DestinationPort'],
                x['Protocol'], x['show'], x['push']))

        threads = [gevent.spawn(firewall, command) for command in 
        commands]
        gevent.joinall(threads)
        return "done" ###### how do i return the returns in function 
                            Firewall

    else:
        return jsonify({"message": "ERROR: Unauthorized"}), 401

, когда Python работает, находит автоматическое обнаружение устройства и регистрируется, получает информацию, которую я могу напечатать, все это просто не могу получить эти возвратывернуться назад enter code here

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

return - это ключевое слово, переменная с данными в вашем коде возвращает

return returns # Will work !!!!!!
0 голосов
/ 11 мая 2019

Вы получили опечатку с заявлением о возврате

return return # Невозможно вернуться обратно !!!!!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...