2015-09-28 4 views
0

Итак, я пишу интеграционную тестовую структуру, которая состоит из задней части и передних частей. Передний конец проходит в Ruby on Rails, и я начинаю его с помощью командной строки:Запуск веб-сервера в процессе ожидания - Python

bundle exec thin start -p 3001 --ssl 

Я хочу, чтобы выполнить эту команду в своем собственном процессе. В настоящее время я использую subprocess:

cmd = bundle exec thin start -p 3001 --ssl 
subprocess.call([cmd]) 

Однако subprocess.call будет ждать, пока процесс возвращается (который он не будет, так как это веб-сервер). Мне нужно, чтобы Rails-сервер работал на своем собственном процессе. Как я могу это сделать?

ответ

1

Это почти то же самое, что у вас есть, поэтому я полагаю, что это было бы что-то вроде этого:

arg = 'exec thin start -p 3001 --ssl' 
bundle_pid = Popen(['/usr/bin/bundle', arg],close_fds=True).pid 

Где bundle_pid процесс идентификатор порожденного процесса.

Редактировать: Как «не работает» не дает мне многого, чтобы продолжить, вот макет с использованием libreoffice, так как у меня нет рубина на рельсах.
Надеюсь, вы сможете выбрать из него кости.

from subprocess import call, Popen, PIPE 
import os, signal 
from os.path import expanduser 
home_dir = expanduser("~/fs3") 
#arg = home_dir+'/fs3.csv' 
arg = '' 
#pid = Popen(['/usr/bin/loffice', arg],close_fds=True).pid 
pid = Popen(['/usr/bin/loffice', arg],close_fds=True).pid 
n = 0 
while n < 200000: 
    n += 1 
    print "still running", n 
print pid 
main_pid = os.popen('ps --no-headers -C soffice.bin').read(5) 
print main_pid 
repr(main_pid) 
if main_pid != "": 
    main_pid = int(main_pid) 
    os.kill(main_pid, signal.SIGKILL) 
n = 0 
while n < 100000: 
    n += 1 
    print "still running 2", n 
+0

Это не сработало ... – cybertextron

+0

Вы получили сообщение об ошибке –

Смежные вопросы