Python, используя os.system - есть ли способ для скрипта Python пройти мимо этого, не дожидаясь завершения вызова? - PullRequest
6 голосов
/ 30 сентября 2010

Я пытаюсь использовать Python (через инфраструктуру Django) для вызова командной строки в Linux и пробовал оба os.system и os.open, но для обоих из них кажется, что скрипт Python зависает после выполнения вызова командной строки поскольку вызов предназначен для создания экземпляра сервера (поэтому он никогда не «завершается», так как он предназначен для длительной работы). Я знаю, что для того, чтобы сделать что-то подобное с другим кодом Python, вы можете использовать что-то вроде сельдерея, но я подумал, что будет простой способ заставить его просто сделать вызов командной строки и не быть «привязанным к нему», чтобы он мог просто двигаться В прошлом мне интересно, делаю ли я что-то не так ... спасибо за любой совет.

В настоящее время я звоню вот так

os.system("command_to_start_server")

также пробовал:

response = os.popen("command_to_start_server")

Ответы [ 3 ]

9 голосов
/ 30 сентября 2010

Я не уверен, но я думаю модуль подпроцесса с его Popen гораздо более гибок, чем os.popen.Если я правильно помню, это включает в себя создание асинхронного процесса, что, я думаю, именно то, что вы ищете.

Редактировать: Прошло много времени с тех пор, как я использовал модуль подпроцесса, но если я 'Я не ошибаюсь, subprocess.Popen немедленно возвращается, и только когда вы пытаетесь установить связь с процессом (например, читаете его вывод) с помощью subprocess.communicate, ваша программа блокирует ожидание вывода, если его нет.

2 голосов
/ 30 сентября 2010

Вы можете использовать Джанго-сельдерей . Джанго-сельдерей обеспечивает интеграцию сельдерея для Джанго. Celery - это очередь задач / очередь заданий, основанная на распределенной передаче сообщений.

См. http://ask.github.com/celery/getting-started/first-steps-with-django.html, чтобы узнать, как его использовать.

0 голосов
/ 30 сентября 2010

Попробуйте:

os.system("command_to_start_server &>/dev/null &")
...