OSError:[Errno 22]Python PHP问题

OSError:[Errno 22]Python PHP问题,php,python,exec,last.fm,Php,Python,Exec,Last.fm,我之前问过一个类似的问题,但最终我在解决这个问题上走得更远了,但现在我被卡住了 我正在dreamhost上的Web服务器上运行python。我使用putty将其转换为shell并运行python脚本,效果非常好。但是当我使用exec从php运行它时,它崩溃了 在php中使用passthru()函数时,返回以下错误: Traceback (most recent call last): File "newwork.py", line 20, in api=lastfm.Api(api_key)

我之前问过一个类似的问题,但最终我在解决这个问题上走得更远了,但现在我被卡住了

我正在dreamhost上的Web服务器上运行python。我使用putty将其转换为shell并运行python脚本,效果非常好。但是当我使用exec从php运行它时,它崩溃了

在php中使用passthru()函数时,返回以下错误:

Traceback (most recent call last): File "newwork.py", line 20, 
in api=lastfm.Api(api_key) File "lastfm/api.py", line 22, 
in __init__ File "lastfm/filecache.py", line 19, 
in __init__ File "lastfm/filecache.py", line 76, 
in _InitializeRootDirectory File "lastfm/filecache.py", line 70, 
in _GetTmpCachePath File "lastfm/filecache.py", line 66, 
in _GetUsername OSError: [Errno 22] Invalid argument 
我不知道这意味着什么,也不知道从哪里开始。有关更多信息,我正在使用python lastfm模块,可在此处找到:

我的python脚本就是这样做的:

import sys
import lastfm
import MySQLdb

sys.stderr=sys.stdout
value="testuser"
api_key='---my api key is here'
api=lastfm.Api(api_key)
user=api.getUser(value)
top_artists=user.topArtists
任何帮助或任何想法都将不胜感激。我甚至不知道从哪里开始

编辑:我做了更多的工作,发现完整的最后一行是:

line 66, in _GetUsername os.getlogin() or \ OSError: [Errno 22] Invalid argument 
GetUsername函数就是这样的:

def _GetUsername(self):
'''Attempt to find the username in a cross-platform fashion.'''
return os.getenv('USER') or \
os.getenv('LOGNAME') or \
os.getenv('USERNAME') or \
os.getlogin() or \
'nobody'
此处未更正缩进。

应该会有所启发:

os.getlogin()
:“返回登录到进程控制终端的用户。”从cron运行脚本时,脚本没有控制终端。文档继续建议:“在大多数情况下,使用环境变量
LOGNAME
查找用户是谁,或者
pwd.getpwuid(os.getuid())[0]
获取当前有效用户id的登录名更为有用。”

您通过PHP中的
passthru()
调用脚本。PHP将作为web服务器用户运行——通常是
nobody
apache
——与cron一样,该用户也不会控制终端

虽然您可能能够修补代码,但将发现的问题提交到python lastfm项目中可能会更好。不幸的是,我对Python的了解还不够,无法帮助完成这项任务,而且我也不太清楚为什么PythonLastFM应用程序希望获得当前用户。看起来它只是在寻找一个临时文件路径,并试图巧妙地处理它

修补的另一种方法可能是为脚本设置环境变量,但是对于
passthru
,没有一种明显的方法可以做到这一点。也许您可以在调用
passthru
之前尝试使用,其中'myname'是您的shell登录名。

应该会有所启发:

os.getlogin()
:“返回登录到进程控制终端的用户。”从cron运行脚本时,脚本没有控制终端。文档继续建议:“在大多数情况下,使用环境变量
LOGNAME
查找用户是谁,或者
pwd.getpwuid(os.getuid())[0]
获取当前有效用户id的登录名更为有用。”

您通过PHP中的
passthru()
调用脚本。PHP将作为web服务器用户运行——通常是
nobody
apache
——与cron一样,该用户也不会控制终端

虽然您可能能够修补代码,但将发现的问题提交到python lastfm项目中可能会更好。不幸的是,我对Python的了解还不够,无法帮助完成这项任务,而且我也不太清楚为什么PythonLastFM应用程序希望获得当前用户。看起来它只是在寻找一个临时文件路径,并试图巧妙地处理它

修补的另一种方法可能是为脚本设置环境变量,但是对于
passthru
,没有一种明显的方法可以做到这一点。也许您可以在调用
passthru
之前尝试使用,其中“myname”是您的shell登录名