我试图做的是一个GUI程序。我想要一个可以暂停脚本的按钮,当我再次点击按钮时,它会恢复。
我看过this question和this question。
问题是,他们都在处理控制台,而那些人的推荐似乎在寻找按键,这不是我想要达到的目的。
是否有某种方法可以将脚本冻结到原来的位置,然后重启,就像什么都没发生一样?
答案 0 :(得分:2)
你可以冻结进程 - (比如linux中的ctrl+z
)并在以下情况下重启:
>>> import psutil
>>> somepid = 999
>>> p = psutil.Process(somepid)
>>> p.suspend()
>>> p.resume()
答案 1 :(得分:0)
好的,你没有提供太多信息,但我在其他帖子中改编了类似的答案,因为我认为它可以为你提供解决方案。 这个例子是使用Threads,因为我想到的第一件事就是做你想做的事。一个线程(func_control)负责输入,另一个(func_1)完成实际工作。
这个想法是当你按Enter键时,执行该工作的功能将暂停或恢复。拥有sleep(0.1)
以便不会使CPU过载非常重要。我没有包含任何东西来完成执行,但我认为你可以单独做到这一点...... ;-)
享受!
from threading import Thread
def func_control():
global switch
switch = 1
while True:
if switch:
print "I'm doing stuff. Press Enter to pause me!"
else:
print "I'm doing nothing. Press Enter to resume!"
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
line = raw_input()
switch = 0 if switch == 1 else 1
def func_1():
while True:
if switch != 0:
# Put all you need to do here!
pass
else:
sleep(0.1)
return 0
switch = 1
myThread1 = Thread(target=func_1)
myThread1.daemon = True
myThread1.start()
func_control()