Как я могу использовать командную строку (например, sox) через subprocess.Popen with mod_wsgi? - PullRequest
0 голосов
/ 07 марта 2011

У меня есть пользовательское файловое поле django, в котором используется sox, audiotool для командной строки. Это работает довольно хорошо, пока я использую сервер разработки django. Но как только я переключаюсь на рабочий сервер, используя apache2 и mod_wsgi, mod_wsgi перехватывает каждый вывод на стандартный вывод. Это делает невозможным использование инструмента командной строки для оценки файла, например, используйте его для проверки, действительно ли загруженный файл является аудиофайлом, например так:

filetype=subprocess.Popen([sox,'--i','-t','%s'%self.path], shell=False,\
                          stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(filetype,error)=filetype.communicate()
if error:
    raise EnvironmentError((1,'AudioFile error while determining audioformat: %s'%error))  

Есть ли способ обойти это?

редактировать
ошибка, которую я получаю, это «отсутствует имя файла». Я использую mod_wsgi 2.5, стандартную для Ubuntu 8.04.

edit2
Что именно происходит, когда я вызываю subprocess.Popen изнутри django в mod_wsgi? Разве подпроцесс stdin / stdout не должен быть независимым от django stdin / stdout? В этом случае mod_wsgi не должен влиять на программы, вызываемые через подпроцесс. Можно ли использовать подобный командной строке из mod_wsgi?

1 Ответ

0 голосов
/ 07 марта 2011

Добавьте отладку в вашу программу, чтобы регистрировать в stderr значение «self.path», чтобы убедиться, что оно действительно установлено на что-то. Сообщение «отсутствует имя файла» предполагает, что оно может быть пустым. Также помните, что при работе в Apache / mod_wsgi вы должны использовать абсолютные пути к файлам, потому что текущий рабочий каталог не будет каталогом проекта, как на сервере разработки Django. Наконец, Apache работает как специальный пользователь, поэтому он должен иметь соответствующий доступ для чтения и / или записи в каталогах, к которым он нужен для доступа / записи. Проблемы с путями и доступом описаны в:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues

Кстати, для проблем с stdout вам действительно нужно обновить систему до mod_wsgi 3.3. Читайте:

http://blog.dscpl.com.au/2009/04/wsgi-and-printing-to-standard-output.html

...