【问题标题】:Working Python script does not work when run via PHP通过 PHP 运行时,工作 Python 脚本不起作用
【发布时间】:2017-08-29 23:56:56
【问题描述】:

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

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

<?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。

谢谢

【问题讨论】:

  • 最后不是少了一个return吗?只是猜测。

标签: php python bash shell webserver


【解决方案1】:

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

如果你擅长 php 那么 最近针对这类问题开发了一个脚本kindle看看,希望对你有帮助

Run Complex Shell scripts through php

快乐编码

【讨论】:

    【解决方案2】:

    我终于弄清楚了问题所在。 Apache 没有使用我的用户 PATH,因此它调用了错误版本的 Python (2.4) 而不是 3.6。当我将完整路径替换为正确版本的 Python 时,它运行良好。

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 2018-01-31
      • 2015-07-15
      • 2020-09-02
      • 2019-05-11
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多