如果文件具有CRLF行结尾,为什么在类Unix系统上运行CGI / WSGI的python脚本会失败?

时间:2011-12-05 17:42:32

标签: python linux cgi webserver wsgi

过去,我曾尝试在CGI或WSGI下运行Python脚本,只是为了在我的网络服务器日志中出现以下含糊不清的错误:

[error] [client <client>] (2)No such file or directory: exec of '/path/to/web/root/test.py' failed

即使使用非常简单的脚本,也会发生这种情况,即:

#!/usr/bin/python
print "Content-Type: text/html\n\n"

print "Hello, World!"

过去,我设法通过确保文件使用unix行结尾来解决问题,但出于好奇,我有以下问题:

  1. 据我所知,上述错误意味着无法找到python可执行文件;我是对的吗?
  2. 如果找不到python可执行文件,为什么? CRLF结局是否打破了shebang线?
  3. 除了转换格式之外,还有其他解决方法吗?是否可以通过这种方式自动配置CGI / WSGI?
  4. 我已经在Ubuntu 11.04上使用Apache 2.2验证了这个特定的例子,在CGI下运行Python 2.6。

2 个答案:

答案 0 :(得分:1)

  

如果找不到python可执行文件,为什么? CRLF结局是否打破了shebang线?

是的,就是这样。

  

除了转换格式之外,还有其他解决方法吗?是否可以以这种方式自动配置CGI / WSGI?

什么东西不会让你想要呕吐?我不这么认为。

答案 1 :(得分:-2)

Python将能够处理CRLF行结尾,但Linux / Unix期望只有LF作为行尾,所以一个令人难以置信的丑陋的解决方法可能是(将^ M作为文件名的一部分):

$ sudo ln -s /usr/bin/python /usr/bin/python^M

请注意,您必须从命令行中转义^ M,因此在bash中它将是^ V ^ M。