Раньше было несколько случаев, когда я пытался запустить скрипт Python под CGI или WSGI, только чтобы получить следующую неоднозначную ошибку в моем журнале веб-сервера:
[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, но из любопытства у меня возникают следующие вопросы:
Я проверил этот конкретный пример с Apache 2.2 на Ubuntu 11.04, запустив Python 2.6 под CGI.
В случае, если исполняемый файл python не найден, почему? Разрывы CRLF нарушают линию shebang?
Да, это так.
Есть ли обходной путь для этого, кроме преобразования формата? Возможно ли настроить CGI/WSGI таким образом, чтобы это автоматически обрабатывалось?
Что-то, что не заставляет вас хотеть блевать? Я так не думаю.
Python сможет обрабатывать окончательные строки CRLF, но Linux/Unix ожидает только LF, когда заканчивается строка, поэтому невероятное уродливое обходное решение может быть (имеющее ^ M как часть имени файла):
$ sudo ln -s /usr/bin/python /usr/bin/python^M
Обратите внимание, что вам нужно избежать ^ M из командной строки, поэтому в bash это будет ^ V ^ M.