我正在尝试在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。
由于
答案 0 :(得分:2)
从技术上讲,您必须具有某些操作系统权限才能通过php运行此类脚本。
如果你擅长php那么 最近我开发了一个针对此类问题的脚本,请看看,我希望它会有所帮助
Run Complex Shell scripts through php
快乐编码
答案 1 :(得分:0)
我终于弄明白了问题所在。 Apache没有使用我的用户PATH,所以它调用了错误版本的Python(2.4)而不是3.6。当我将完整路径替换为正确版本的Python时,它工作得很好。