2016-04-06 5 views
3

Я хочу запустить экземпляр моего приложения Flask в фоновом режиме, чтобы я мог запускать на нем тесты webdriver. Для этого мне нужно поймать вывод команды &, чтобы я мог убить процесс, когда тест заканчивается.Запуск процесса в фоновом режиме и извлечение вывода

Я пробовал subprocess.call() и subprocess.check_output(), но я не могу поймать номер процесса первого или фонового процесса с другим. Что еще я могу попробовать?

+0

Вы посмотрели на [Flask-Testing] (https://flask-testing.readthedocs.org/en/latest/#testing-with-liveserver)? – tzaman

+0

Uh. Поверните его в ответ, и я приму его. – ruipacheco

+0

Рад, что сработало для вас! сделанный. – tzaman

ответ

1

Вы можете посмотреть на Flask-Testing библиотеку, которая имеет поддержку для запуска вашего фляжного сервера, чтобы вы могли провести с ним тесты селена.

1

Вы можете использовать поЬир с Popen:

from subprocess import Popen, check_call 

from os import devnull 

p = Popen(["nohup", "python", "test.py"], stdout=open(devnull, "w")) 

import time 

print(p.pid) 
for i in range(3): 
    print("In for") 
    time.sleep(1) 

check_call("ps -ef | grep {} | grep -v grep".format(p.pid), shell=True) 
p.terminate() 
check_call("ps -ef | grep {} | grep -v grep".format(p.pid), shell=True) 

test.py:

import time 
while True: 
    time.sleep(1) 
    print("Still alive") 

Выход:

In [3]: from os import devnull 

In [4]: p = Popen(["nohup", "python", "b.py"], stdout=open(devnull, "w")) 
nohup: ignoring input and redirecting stderr to stdout 
In [5]: print(p.pid) 
28332 

In [6]: for i in range(3): 
    ...:   print("In for") 
    ...:   time.sleep(1) 
    ...:  
In for 
In for 
In for 

In [7]: check_call("ps -ef | grep {} | grep -v grep".format(p.pid), shell=True) 
padraic 28332 28301 1 20:55 pts/8 00:00:00 python test.py 
Out[7]: 0 

In [8]: p.terminate() 

In [9]: check_call("ps -ef | grep {} | grep -v grep".format(p.pid), shell=True) 
padraic 28332 28301 0 20:55 pts/8 00:00:00 [python] <defunct> 
Out[9]: 0 
+0

Не испорчен ли Popen? – ruipacheco

+0

@ruipacheco, os.Popen, а не subprocess.Popen, 99 процентов подпроцесса использует Popen –

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