2010-09-30 1 views
5

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

Я делаю вызов, как это в настоящее время

os.system("command_to_start_server") 

также попытался:

response = os.popen("command_to_start_server") 

ответ

9

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

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

+0

ничего не будет видно, это похоже на лучшее решение, чем то, что я делал ... есть странные " привязка ", когда я делаю вызовы cmd так, как я проходил через объект, который был инициирован из Django, вызов, который я делал в строке cmd, заключался в том, чтобы запустить другой тестовый сервер (на diff-порт), но каким-то образом связанный с тестовым сервером Django, где он приводит к сбою тестового сервера Django, хотя я могу нормально запускать их оба одновременно, когда я запускаю их вручную из строки cmd – Rick

0

Try:

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

Спасибо, что заставил его работать, хотя его поведение по-прежнему вызывает странное поведение, поскольку выходная страница в Django (хотя и показывает окончательный вывод) продолжает показывать «Загрузка» бесконечно ... но делать то, что вы сказали, часть, где она была «висит» – Rick

+0

, теперь она перенаправляет весь вывод на/dev/null, поэтому на странице – tamasd