也许你应该这样做:
os.execl(INTERP, *sys.argv) # don't pass again the interpreter path.
我认为这个文档是错误的:http ://wiki.dreamhost.com/Passenger_WSGI
关于执行:
类 Unix 操作系统的 exec 函数是一组函数,它们导致正在运行的进程被作为参数传递给函数的程序完全替换。
os.execl(path, arg0, arg1, ...)
os.execle(path, arg0, arg1, ..., env)
os.execlp(file, arg0, arg1, ...)
os.execlpe(file, arg0, arg1, ..., env)
os.execv(path, args)
os.execve(path, args, env)
os.execvp(file, args)
os.execvpe(file, args, env)
来自: http ://docs.python.org/library/os.html
exec*() 函数的“l”和“v”变体在传递命令行参数的方式上有所不同。如果在编写代码时参数的数量是固定的,那么“l”变体可能是最容易使用的;单个参数只是成为 execl*() 函数的附加参数。当参数的数量是可变的时,“v”变体很好,参数在列表或元组中作为 args 参数传递。在任何一种情况下,子进程的参数都应该以正在运行的命令的名称开头,但这不是强制的。
编辑:
我刚刚做了你在 python shell 中所做的事情,我得到了同样的错误:
>>> import os
>>> import sys
>>> os.execl('/home/login/projects/virtual/bin/python', '/home/login/projects/virtual/bin/python', *sys.argv)
/home/login/projects/virtual/bin/python: can't find '__main__.py' in ''