Выполнение программ командной строки из python

Возможный дубликат:
Вызов внешней команды в Python

Я создаю веб-приложение, которое будет обрабатывать звуковые файлы (pad, mix, merge и т. Д.), И я обнаружил, что sox делает именно то, что я хочу. Sox – это программа командной строки linux, и мне немного неудобно, когда веб-приложение python запускает новые процессы sox на моем сервере для каждого запроса.

Пример:

import os os.system('sox input.wav -b 24 output.aiff rate -v -L -b 90 48k') 

Вся эта установка кажется мне немного неустойчивой.

Итак, мой вопрос: что лучше всего подходит для запуска программ командной строки из веб-приложения python (или любого скриптового языка)?

Очереди сообщений будут реализованы для того, чтобы обойти весь цикл ответа на запрос. Но есть ли другие способы сделать эти вещи более элегантными?

Модуль subprocess является предпочтительным способом запуска других программ с Python – гораздо более гибким и os.system в использовании, чем os.system .

 import subprocess #subprocess.check_output(['ls','-l']) #all that is technically needed... print subprocess.check_output(['ls','-l']) 

«Вся эта установка кажется мне немного неустойчивой».

Поговорите с сотрудниками ffmpegx о том, что у него есть интерфейс GUI поверх командной строки. Кажется, это их не беспокоит.

Действительно, я утверждаю, что интерфейсный интерфейс (или веб-интерфейс) поверх бэкэнда из командной строки на самом деле более стабилен, поскольку у вас очень чистый интерфейс между графическим интерфейсом и командой. Команда может развиваться в другом темпе из Интернета, если параметры командной строки совместимы, у вас нет возможности поломки.

Мне немного неудобно, когда веб-приложение python запускает новые процессы sox на моем сервере для каждого запроса.

Для меня это, по-видимому, означает, что он опасается, что, если он откроет свой веб-сервер для публики, он не сможет много сделать, чтобы предотвратить использование его ресурсов сервера, если 15 000 человек решат нажать на эту кнопку, которая запустит sox в этом случае.

Я не знаком с sox, но вместо повторных вызовов программы в качестве командной строки можно ли настроить ее как службу и подключиться к ней для запросов? Вы можете взглянуть на интерфейс соединения, такой как sqlite для вдохновения.

Если вас беспокоит производительность сервера, посмотрите на ограничение количества запущенных процессов sox. Если кепка была удалена, вы всегда можете кэшировать запрос и сообщать пользователю, когда он будет завершен, в зависимости от того, что подходит вашему приложению.

Кроме того, у вас есть n рабочих сценариев на других машинах, которые вытаскивают запросы из db и вызывают sox, а затем выталкивают полученный файл вывода туда, где он должен быть.