2016-09-17 2 views
1

Я хотел бы создать веб-приложение для запуска сценария bash, расположенного на сервере. В основном я хочу этот сайт:python django run bash script на сервере

  • Загрузить файл
  • выбрать некоторые параметры
  • Run Баш скрипт принимает входной файл и параметры
  • загрузить результаты

Я знаю, вы можете сделать это с помощью php, javascript ... но я никогда не программировал на этих языках. Однако я могу программировать на python. Я использовал библиотеку pyQT в python для аналогичных целей.

Можно ли это сделать с помощью django? или я должен начать изучать php & javascript? Я не могу найти учебник для этой конкретной задачи в Django.

+0

Добро пожаловать в stackoverflow. Что ты уже испробовал? Вы должны показать свои собственные усилия, прежде чем получать ответы от других. – tfv

ответ

1

Это можно сделать в Python с использованием рамки Django.

Сначала создайте форму, включающую в себя FileField и поля для других параметров:

from django import forms 

class UploadFileForm(forms.Form): 
    my_parameter = forms.CharField(max_length=50) 
    file = forms.FileField() 

Включите UploadFileForm на ваш взгляд, и обратитесь к функции для обработки загруженного файла:

from django.http import HttpResponseRedirect 
from django.shortcuts import render 
from .forms import UploadFileForm 

# Imaginary function to handle an uploaded file. 
from somewhere import handle_uploaded_file 

def upload_file(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      my_parameter = form.cleaned_data['my_parameter'] 
      # Handle the uploaded file 
      results = handle_uploaded_file(request.FILES['file'], title) 
      # Clear the form and parse the results 
      form = UploadFileForm() 
      return render(request, 'upload.html', {'form': form, 'results': results}) 
    else: 
     form = UploadFileForm() 
    return render(request, 'upload.html', {'form': form}) 

Создать функцию обработки загруженного файла и вызов вашего сценария bash:

import subprocess 
import os 

def handle_uploaded_file(f, my_parameter): 
    file_path = os.path.join('/path/to/destination/', f.name) 
    # Save the file 
    with open(file_path, 'wb+') as destination: 
     for chunk in f.chunks(): 
      destination.write(chunk) 
    # Call your bash script with the 
    output = subprocess.check_output(['./my_script.sh',str(file_path),str(my_parameter)], shell=True) 
    return output 

Зайдите в https://docs.djangoproject.com/en/1.10/topics/http/file-uploads/ для получения дополнительных примеров и инструкций о том, как файл дескриптора загружается в Django.