Python скрипт зацикливается после выполнения импортированного скрипта - PullRequest
0 голосов
/ 26 марта 2020

Моя конечная цель заключается в том, чтобы после того, как основной сценарий Python завершил выполнение, запустите импортированный сценарий и, если пользователь Ctrl- C завершит работу. Однако после того, как основной сценарий Python завершил выполнение импортированного сценария, он сразу же запустился снова, как в al oop. Я почти уверен, что весь код и логи c двух программ не нужны, но я не могу импортировать их:

Импортированный скрипт:

def start():
    app.run(debug = True)

Основной скрипт:

import script_2.py
.
.
.
script2.start()
exit()  # Doesn't Work

Я думаю, также стоит отметить, что импортированный скрипт является Flask скриптом, поэтому, пока пользователь не нажмет Ctrl- C d, программа не должна быть прервана.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

debug=True перезапустит ваше приложение, если вы внесете какие-либо изменения в script_2.py. См .: https://flask.palletsprojects.com/en/1.1.x/quickstart/#debug -mode

Удалите его, если вы не хотите этого поведения.

0 голосов
/ 27 марта 2020

Я не уверен насчет терминологии. Мой способ реализации это другой способ OOP или импорта. Так что, если у кого-то есть подходящая терминология для этого, пожалуйста, предоставьте это (извините, я благо). В основном мы используем подпроцесс для вызова script_2.py. 'r' в windows.

proc = subprocess.Popen(
                [r'path\to\python.exe',
                 r'path\to\script_2.py', var_1, var_2)

Вы перехватываете var_1 с помощью sys.argv [1] и var_2 с помощью sys.argv [2] в script_2.py.

Сейчас для сложной части. вам нужно использовать pickle для предоставления файла со счетчиком. В script_1.py:

counter_file = 'counter'

def unpickle_database(filename):
    with open(filename, 'rb') as f:
        while True:
            try:
                yield pickle.load(f)
            except EOFError:
                break  



def return_counter():
    count = list(unpickle_database(counter_file))
    try:
        return count[0]
    except IndexError:
        return 0

def save_counter(counter_file):
    raw_counter = return_counter()
    final_counter = counter + raw_counter
    with open(counter_file, 'wb') as output:
        pickle.dump(final_counter, output, pickle.HIGHEST_PROTOCOL)

        while running:
            if return_counter() < int(threads.get()):
                counter += 1
                save_counter(counter_file)
                if not running:
                    break

                proc = subprocess.Popen(
                    [r'path\to\python.exe',
                     r'path\to\tor_money.py', var_1, var_2)

В script_2.py:

counter_file = 'counter'

def unpickle_database(filename):
    with open(filename, 'rb') as f:
        while True:
            try:
                yield pickle.load(f)
            except EOFError:
                break


def return_counter():
    count = list(unpickle_database(counter_file))
    for number in count:
        return number

## end your process here

raw_counter = return_counter()
print(raw_counter)

final_counter = raw_counter - 1
with open(counter_file, 'wb') as output:
    pickle.dump(final_counter, output, pickle.HIGHEST_PROTOCOL)
print(final_counter)
...