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)
我的最终目标是,在主 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)