Как выйти из скрипта Python, вызванного в приложении Flask?

У меня есть фляжное приложение, в котором я повторно использую функцию в скрипте Python (poll_servers.py). Я могу импортировать функцию и запустить ее, но я хочу поставить галочку, которая закроет функцию, если она запущена.

Вот мой код в скрипте python:

import os
import sys

# check if lock file exists, exit
if os.path.exists('static/poll.lock'):
    sys.exit(1)

if not os.path.exists('static/poll.lock'):
    with open('static/poll.lock', 'w'): pass

В моем app.py у меня есть:

from poll_servers import poll

@app.route('/poll_servers', methods=['GET'])
def poll_servers():

    response = json.dumps({'status':'OK'})

    poll()

    return response

Я получаю сообщение об ошибке sys.exit(1) в poll_servers.py:

File "app.py", line 109, in poll_servers
  poll()
File ".../poll_servers.py", line 262, in poll
  sys.exit(1)
File ".../venv/lib/python2.7/site.py", line 403, in __call__
  raise SystemExit(code)
SystemExit: None

Есть идеи? Если я запускаю poll_servers.py сам по себе, sys.exit(1) работает нормально.

Какая ошибка вылетает?

Joe 30.05.2019 10:10

У меня отлично работает, если я меняю static/poll.lock на /tmp/poll.lock.

Joe 30.05.2019 10:14

Я добавил ошибку. По-прежнему выдает исключение при перемещении файла блокировки в каталог tmp, как было предложено.

MoreScratch 30.05.2019 15:41

Файл может оставаться в static, это ничего не изменит. Я просто использовал другой путь.

Joe 30.05.2019 16:12

Возможный дубликат Приложение Python Flask не закрывается с выходом sys

Joe 30.05.2019 16:12

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

MoreScratch 30.05.2019 16:13
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
619
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Тогда просто ничего не делайте и не меняйте порядок ваших утверждений if:

import os
import sys

if not os.path.exists('static/poll.lock'):

    with open('static/poll.lock', 'w'): 

        pass

else:

    pass
    # do something

Другие вопросы по теме