如何在中间暂停Python脚本并恢复它?

时间:2014-03-15 20:22:52

标签: python python-2.7 user-interface tkinter

我试图做的是一个GUI程序。我想要一个可以暂停脚本的按钮,当我再次点击按钮时,它会恢复。

我看过this questionthis question

问题是,他们都在处理控制台,而那些人的推荐似乎在寻找按键,这不是我想要达到的目的。

是否有某种方法可以将脚本冻结到原来的位置,然后重启,就像什么都没发生一样?

2 个答案:

答案 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()