Python 执行导入脚本后脚本循环

Python script loops after done executing imported script

我的最终目标是,在主 Python 脚本执行完毕后,启动导入的脚本,如果用户按 Ctrl-C 退出。 但是,Python 主脚本执行完导入的脚本后,立即又开始了,就像在循环中一样。 我很确定这两个程序的所有代码和逻辑都是不必要的,但是我如何导入它们不是:

导入的脚本:

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

主要脚本:

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

我认为导入的脚本是 Flask 脚本也值得注意,因此在用户按 Ctrl-C 之前,程序不应终止。

如果您在 script_2.py 中进行任何更改,

debug=True 将重新启动您的应用程序。参见:https://flask.palletsprojects.com/en/1.1.x/quickstart/#debug-mode

如果您不希望出现这种情况,请将其删除。

我不确定术语。我的实现方式是一种不同的 OOP 或导入方式。因此,如果有人对此有正确的术语,请提供它(抱歉,我很幸运)。 基本上我们使用子进程来调用 script_2.py。 'r' 在 windows.

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

您用 sys.argv[1] 捕获了 var_1,在 script_2.py 中用 sys.argv[2] 捕获了 var_2。

现在是棘手的部分。您需要使用 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)