How to run python script from web page?

Viewed 4867

Im quite new in web developing, could someone please point me in the right direction of help with the scripts to run a .py script on a web page. Below are the ones that i am using. Do i have to create a html file and a php file?? If so please help me. I have a internal server running on XAMPP with Apache and configured to run CGI, .py scripts.

Work flow:

Upload > button to run the below .py script > download

Upload script(php):

<?php
if(isset($_POST['UploadButton'])){ //check if form was submitted

$target_dir = '/opt/lampp/htdocs/pic-el/Dump/';
$target_file = $target_dir . basename($_FILES["filepath"]["name"]);
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
move_uploaded_file($_FILES["filepath"]["tmp_name"], $target_file);
} 
?>

Python script:

#!/usr/bin/env python

import CGIHTTPServer
CGIHTTPServer.test()
import os
import urllib
import cgi
import webcolors 
import xlsxwriter
from PIL import Image

filename = "/home/Desktop/tess/test1"

imageNameArray = []


def downloadfile(urlData):
    urllib.urlretrieve(urlData[0], urlData[1])
    print " image downloaded: " + str(urlData[1])
    return


# open file to read
with open("{0}.csv".format(filename), 'r') as csvfile:
    # iterate on all lines
    i = 0
    for line in csvfile:
        splitted_line = line.split(',')
        # check if we have an image URL
        if splitted_line[1] != '' and splitted_line[1] != "\n":
            # urllib.urlretrieve(splitted_line[1], '/home/tf_files/images/{0}.jpg'.format (splitted_line[0]))
            imageNameArray.append(
                (splitted_line[1], '/home/Desktop/tess/images/{0}.jpg'.format(splitted_line[0])))
            print "Image added to list for processing for {0}".format(splitted_line[0])
            i += 1
        else:
            print "No result for {0}".format(splitted_line[0])

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

from multiprocessing import Pool

processPool = Pool(5)
processPool.map(downloadfile, imageNameArray)

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('output1.xlsx')
worksheet = workbook.add_worksheet()
# Start from the first cell. Rows and columns are zero indexed.
row = 0
col = 0

# search for files in 'images' dir
files_dir = os.getcwd() + '/images'
files = os.listdir(files_dir)


def closest_colour(requested_colour):
    min_colours = {}
    for key, name in webcolors.css3_hex_to_names.items():
        r_c, g_c, b_c = webcolors.hex_to_rgb(key)
        rd = (r_c - requested_colour[0]) ** 2
        gd = (g_c - requested_colour[1]) ** 2
        bd = (b_c - requested_colour[2]) ** 2
        min_colours[(rd + gd + bd)] = name
    return min_colours[min(min_colours.keys())]


def get_colour_name(requested_colour):
    try:
        closest_name = actual_name = webcolors.rgb_to_name(requested_colour)
    except ValueError:
        closest_name = closest_colour(requested_colour)
        actual_name = None
    return actual_name, closest_name


for f in files:
    if f.lower().endswith(('.png', '.jpg', '.jpeg')):
        image_path = files_dir + '/' + f
        im = Image.open(image_path)
        n, cl = max(im.getcolors(im.size[0] * im.size[1]))
        requested_colour = cl
        actual_name, closest_name = get_colour_name(requested_colour)


        width = im.size
        if width < (500, 500):
            worksheet.write(row, 4, "False")
        else:
            worksheet.write(row, 4, "True")

        print image_path
        print cl
        print width
        print "Actual colour name:", actual_name, ", closest colour name:", closest_name


        worksheet.write_string(row, 1, image_path)
        worksheet.write(row, 3, closest_name)   
        row += 1





workbook.close()
2 Answers
Related