2009-10-22 3 views
10

Я попробовал эти два метода:Как запустить и запустить внешний скрипт в фоновом режиме?

os.system("python test.py") 

subprocess.Popen("python test.py", shell=True) 

Оба подхода необходимо подождать, пока test.py отделки, которая блокирует основной процесс. Я знаю, что «nohup» может справиться с этой задачей. Есть ли способ Python запустить test.py или любые другие сценарии оболочки и оставить его в фоновом режиме?

Пусть test.py, как это:

for i in range(0, 1000000): 
    print i 

И os.system() или subprocess.Popen() будет блокировать основную программу до 1000000 строк вывода не отображается. Я хочу, чтобы test.py запускался молча и выводил только основной вывод программы. Основная программа может зависеть, пока test.py все еще работает.

ответ

32

subprocess.Popen(["python", "test.py"])should work.

Обратите внимание, что выполнение задания может продолжаться, когда ваш основной сценарий завершен. В этом случае попробуйте subprocess.Popen(["nohup", "python", "test.py"])

+1

subprocess.Popen ([ «питон», «test.py»]) просто запускает test.py и блокирует основной процесс, ожидая выхода test.py. – jack

+2

Это должно произойти только при запросе 'stdout = PIPE'. Какая версия Python? Можете ли вы добавить «print» xxx «» после вызова Popen, чтобы проверить, действительно ли он блокируется? –

+0

Я только что проверил код выше, и он работает для меня с Python 2.5.2 на Windows. Ваша проблема должна быть чем-то другим. –

1
os.spawnlp(os.P_NOWAIT, "path_to_test.py", "test.py") 
+0

он работает, но можно ли test.py запускать беззвучно? – jack

+0

бесшумно? вы хотите сказать, что вы не хотите видеть результат на экране? – Viswanadh

+0

Да, я не хочу видеть вывод на экране. можно ли сделать, добавив в код «>>/dev/null»? – jack