通过PHP

时间:2017-08-29 23:56:57

标签: php python bash shell webserver

我正在尝试在Web服务器上运行Python脚本。我无法直接在cgi-bin文件夹中运行脚本(不断收到500个服务器错误),所以我当前正试图通过放置在cgi-bin文件夹中的PHP脚本来调用脚本。

我使用的php脚本在我的服务器上执行shell命令:

<?php
shell_exec('python /home/stevesloane8/www/cgi-bin/test.py');
?>

这个方法适用于我尝试过的一些测试python脚本,但不适用于我的脚本。

这是我的一部分剧本:

#!/usr/bin/python

CATEGORIES_INDEXED = ["36"]#, "6000", "6002",]

NUMBER_TO_INDEX = 25

import requests
import mysql.connector
import datetime
import time

def get_today():
    today = datetime.date.today()
    return today.strftime("%Y-%m-%d")

def get_start_date():
    today = datetime.date.today()
    start_date = today - datetime.timedelta(weeks=2)
    return start_date.strftime("%Y-%m-%d")

def get_today_underscore():
    today = datetime.date.today()
    return today.strftime("%Y_%m_%d")

def get_token(client, secret):

    payload = {"Content-Type" : "application/x-www-form-urlencoded", "client" : client, "secret" : secret}
    auth = requests.post('https://integrations.apptopia.com/api/login', params=payload)
    return auth.json()['token']

def get_cat_ids():

    r = requests.get('https://integrations.apptopia.com/api/itunes_connect/categories', headers={"Authorization":TOKEN})

    cat_dict = {}

    for cat in r.json():
        cat_dict[cat['id']] = cat['name'].replace(" ", "_").replace("&", "and").replace("-", "to")

    return cat_dict

def pull_top_chart(cat, kind, quant):



    today = time.strftime("%Y-%m-%d")
    top_chart = requests.get("https://integrations.apptopia.com/api/itunes_connect/rank_lists", params={"id":cat, "date":today, "country_iso":"US", "kind":kind}, headers={"Authorization":TOKEN})



    top_app_ids = top_chart.json()[0]['app_ids']
    top_app_ids = top_app_ids[:quant]

    rank_dict = {i:k for k, i in enumerate(top_app_ids)}

我逐行完成了它,并且在上面的PHP脚本调用之前脚本工作,直到我粘贴到最后一行:

rank_dict = {i:k for k, i in enumerate(top_app_ids)}

插入此行后,Python脚本无法通过PHP脚本运行。当我从命令行调用它时它仍然运行。

因为当我从命令行调用它时这个脚本有效,所以PHP shell_exec函数的操作是否有一些特殊的东西阻止它工作。或者在Web服务器上运行是否存在某种权限问题?这两个文件的脚本权限都设置为755。

由于

2 个答案:

答案 0 :(得分:2)

从技术上讲,您必须具有某些操作系统权限才能通过php运行此类脚本。

如果你擅长php那么 最近我开发了一个针对此类问题的脚本,请看看,我希望它会有所帮助

Run Complex Shell scripts through php

快乐编码

答案 1 :(得分:0)

我终于弄明白了问题所在。 Apache没有使用我的用户PATH,所以它调用了错误版本的Python(2.4)而不是3.6。当我将完整路径替换为正确版本的Python时,它工作得很好。