es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo enviar los datos de entrada del usuario de un sitio web de Django a un script externo de Python.

Estoy intentando crear una página web donde los usuarios ingresan dos datos y luego recibo esos datos y los paso a un script externo de Python. No puedo ingresar el script de Python a Django porque es muy grande.

<form action='generate' method='post'>
  {% csrf_token %}
  ingrese el estado actual: <input type="text" name="status"><br>
  ingrese el nivel del agua: <input type="text" name="level"><br>

  <input type="submit" value="submit">
</form>
''' 

Estoy recibiendo el valor ingresado por el usuario en la función "generate" de las vistas, de la siguiente manera: 

'''
def generate(request):
    a = int(request.POST["status"])
    b = int(request.POST["level"])
    out=run(sys.executable, ['C:\Users\siddhant\Desktop\internship\indicator\work\templates\water.py', 'a', 'b'], shell=False, stdout=PIPE)
    print(out)

Quiero ejecutar el archivo water.py aquí mismo pasando los valores de entrada a y b.

from os import read
from random import randint
import sys
from tkinter.constants import X

from datetime import *
import pandas as pd
import numpy as np
from pandas.core.base import DataError

from time import time

start_time = datetime.now()

<h1>do your work here</h1>

x = sys.argv[1]
current_level = sys.argv[2]

Quiero pasar los valores de entrada recibidos a a y b respectivamente.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para pasar la entrada recibida a y b a las variables x y current_level respectivamente, puedes modificar el código en el archivo views.py de la siguiente manera:

    import subprocess
    from django.http import HttpResponse
    
    def generate(request):
        a = request.POST.get("status")
        b = request.POST.get("level")
        cmd = ['python', 'C:/Users/siddhant/Desktop/internship/indicator/work/templates/water.py', str(a), str(b)]
        try:
            result = subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=10, shell=False)
            # Haz algo con el resultado
            return HttpResponse(result)
        except subprocess.CalledProcessError as e:
            return HttpResponse(e.output)
    

    Aquí, estamos utilizando el módulo subprocess en Python para llamar al script water.py con los valores de entrada pasados como argumentos. Esto evitará la necesidad de llamar al script externo directamente desde Django. La salida del script se devuelve como un objeto HttpResponse que se puede mostrar en la página web o utilizar para un procesamiento adicional.

Comments are closed.