Skip to main content
 首页 » 编程设计

php之如何从网页运行 python 脚本

2024年10月01日29zlslch

我在 Web 开发方面还很陌生,有人可以为我指明正确的方向,帮助我在网页上运行 .py 脚本。以下是我正在使用的。我必须创建一个 html 文件和一个 php 文件吗? 如果是这样,请帮助我。我有一个内部服务器在带有 Apache 的 XAMPP 上运行,并配置为运行 CGI、.py 脚本。

工作流程:

上传 > 按钮运行下面的 .py 脚本 > 下载

上传脚本(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 脚本:

#!/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() 

请您参考如下方法:

你不能在网页上运行 .py,只能在服务器上运行,因为 Python 是服务器端编程。但是您可以从 PHP 运行 python 脚本(因为您使用的是 XAMPP。) 示例 -

<?php 
   $output =  exec('./filename.py'); 
?>