2016-09-17 109 views
1

运行bash脚本,我想创建一个网站,应用程序运行位于服务器的bash脚本。基本上,我希望这个网站:蟒蛇Django的服务器

  • 上传文件
  • 选择一些参数
  • 运行bash脚本以输入文件和参数
  • 下载结果

我知道你可以用php,javascript ...做到这一点,但我从来没有用这些语言编程。不过我可以用python编程。为了类似的目的,我在python中使用了pyQT库。

可以这样使用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中处理文件的示例和说明。