【发布时间】: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