在后台启动进程并检索输出
Launch process in background and retrieve output
我想在后台启动我的 Flask 应用实例,这样我就可以 运行 对其进行 webdriver 测试。为此,我需要捕获 &
命令的输出,以便在测试结束时终止进程。
我试过 subprocess.call()
和 subprocess.check_output()
但我无法捕获第一个进程的进程号或另一个进程的背景。我还能尝试什么?
您可以将 nohup 与 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
您可能需要查看 Flask-Testing 库,它支持 运行 您的烧瓶服务器,因此您可以对其进行 selenium 测试。
我想在后台启动我的 Flask 应用实例,这样我就可以 运行 对其进行 webdriver 测试。为此,我需要捕获 &
命令的输出,以便在测试结束时终止进程。
我试过 subprocess.call()
和 subprocess.check_output()
但我无法捕获第一个进程的进程号或另一个进程的背景。我还能尝试什么?
您可以将 nohup 与 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
您可能需要查看 Flask-Testing 库,它支持 运行 您的烧瓶服务器,因此您可以对其进行 selenium 测试。