여기 달성하려는 노력의 축소 요구 사항이 있습니다.우분투에서 Popen이 시작한 Flask 서버를 죽일 수 없습니다.
# run.py
import requests
import time
from subprocess import Popen, PIPE
server = Popen("./app.py", stdout=PIPE, stderr=PIPE, shell=True)
time.sleep(1)
res = requests.get("http://localhost:1234/")
assert res.status_code == 200
server.kill()
server.terminate()
res = requests.get("http://localhost:1234/")
print res
실제 서버 스크립트.
#!/usr/bin/env python
from flask import Flask, make_response, request
app = Flask(__name__)
@app.route('/')
def view():
return make_response("")
if __name__ == "__main__":
app.run(host="localhost", port=1234)
나는 python run.py
을 실행합니다. 그래서 app.py
가 여전히 걸려
(t)[email protected]:/tmp$ ps aux|grep app
yeukhon 21452 0.6 0.4 16416 9992 pts/2 S 03:50 0:00 python ./app.py
yeukhon 21471 0.0 0.0 4384 804 pts/2 S+ 03:51 0:00 grep --color=auto app
: 쉘에서. 나는 커맨드 라인에서 그것을 죽여야 만한다. 실제로 마지막 줄인 run.py
은 서버가 아직 활성 상태임을 나타냅니다 (200이 반환되었습니다).
나는 os.kill(server.pid, signal.SIGTERM)
과 os.kill(server.pid, signal.SIGKILL)
으로 죽이려고했지만 아무 것도 작동하지 않습니다.
일반적으로 kill
이 작동하지만 신호를 수신 할 수없는 이유는 확실하지 않습니다. 나는 어떻게 든 플라스크가 멈추기를 거부하고 있다고 확신한다.
어떤 옵션이 있습니까?
위의 스크립트는 Mac OSX에서 완벽하게 작동합니다 (10.8.5, Mountain Lion). 지금까지 필자는 두 개의 우분투 12.04 머신에서 테스트를했으며, 동일한 동작을합니다. 저는 Mac OSX에서 우분투 컴퓨터와 Python 2.7.2 모두에서 Python 2.7.3을 실행하고 있습니다.
수정 : 유일한 옵션은 http://flask.pocoo.org/snippets/67/입니다. 그러나 나는하지 않는 것을 선호합니다. 그리고 네, Popen을 사용하여 출시해야합니다.
안녕하세요. 같은 문제가 발생했습니다. 그러나, popen을 통해 플라스크를 실행하기 위해 shell = True를 설정해야하는 것처럼 보입니다. 그렇지 않으면 "raise child_exception OSError : [Errno 2] No such file or directory"와 같은 오류 메시지가 표시됩니다. 따라서 최종적으로 코드를 어떻게 수정했는지 궁금합니다. shell = True 일 때, popen에서 시작된 서버는 계속 실행됩니다. – Romaboy