Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows中暂停并恢复Python 3.42中正在运行的脚本_Python - Fatal编程技术网

在Windows中暂停并恢复Python 3.42中正在运行的脚本

在Windows中暂停并恢复Python 3.42中正在运行的脚本,python,Python,我是Python新手,已经在谷歌上搜索了几天,阅读了我在这个论坛上找到的所有内容。也许我不完全理解,但我还没有找到解决问题的办法。已经请求原谅如果我的问题已经有了答案,那么我还没有理解它 我想为我的程序Tennismatch创建一个暂停函数。该程序将在运行时打印网球比赛的分数,如下所示:15-0、15-15等,直到比赛结束。它将逐行打印分数 我希望用户能够在x个球数、游戏数等之后暂停。因此,我不知道用户何时想暂停,在用户暂停后,我希望用户能够在原来的位置恢复tennismatch 我已经看到了时

我是Python新手,已经在谷歌上搜索了几天,阅读了我在这个论坛上找到的所有内容。也许我不完全理解,但我还没有找到解决问题的办法。已经请求原谅如果我的问题已经有了答案,那么我还没有理解它

我想为我的程序Tennismatch创建一个暂停函数。该程序将在运行时打印网球比赛的分数,如下所示:15-0、15-15等,直到比赛结束。它将逐行打印分数

我希望用户能够在x个球数、游戏数等之后暂停。因此,我不知道用户何时想暂停,在用户暂停后,我希望用户能够在原来的位置恢复tennismatch

我已经看到了时间。睡眠,但正如我所理解的,你必须知道什么时候你想暂停使用这个,而且它也不是我想要的不确定的暂停。有了输入,它是一样的

我将在代码完成后制作一个GUI。为任何能让我解决问题的事情感到高兴

我使用Windows和Python 3.42,并在Shell中运行该程序

一段代码尚未全部编写完毕,这更像是一种一般情况,当一行接一行地打印某个内容时,希望能够在CIL中暂停:

自身得分=[0,0] def playGameself: 如果self.server==True:self.server在有人调用playGame时为True或False server=self.player\u 1.get\u win\u serve self.player\u 1=类玩家的对象: 其他: server=self.player\u 2.get\u win\u serve get\u win\u serve方法返回赢得其发球1-0的概率 当0=2或0=2和self.\uu点[1]>=4或self.\uu点[0]>=4时: x=随机。均匀0,1 如果x>0且x<服务器: 自身点[0]+=1 其他: 自身点[1]+=1
通过调用一个我还没有编写的score函数来打印“score”我得出了以下结论

 while True:
        try:
            ## Keep doing something here
            ## your regular code
            print '.',

        except KeyboardInterrupt:
            ## write or call pause function which could be time.sleep()
            print '\nPausing...  (Hit ENTER to continue, type quit to exit.)'
            try:
                response = raw_input()
                if response.lower() == 'quit':
                    break
                print 'Quitting...'
            except KeyboardInterrupt:
                print 'Resuming...'
                continue

为了处理主循环中的事件,您需要创建一个单独的线程来捕获输入或任何其他事件

import sys
from sys import stdin
from time import sleep
from threading  import Thread
from Queue import Queue, Empty


def do_something():
    sleep(1)
    print 42


def enqueue_output(queue):
    while True:
        # reading line from stdin and pushing to shared queue
        input = stdin.readline()
        print "got input ", input
        queue.put(input)


queue = Queue()
t = Thread(target=enqueue_output, args=(queue,))
t.daemon = True
t.start()

pause = False

try:
    while True:
        try:
            command = queue.get_nowait().strip()
            print 'got from queue ', command
        except Empty:
            print "queue is empty"
            command = None

        if command:
            if command == 'p':
                pause = True

            if command == 'u':
                pause = False

        if not pause:
            print pause
            do_something()

except KeyboardInterrupt:
    sys.exit(0)
事件循环也可能是我用它编写的代码

我没有看到任何用户输入,所以我假设x模拟了它。若要在x<0.1时暂停游戏,若x>0.9时取消暂停/恢复游戏,您可以:

while your_condition(self.__points): 
    x = random.random()
    if x < 0.1: # pause
       self.pause()
    elif x > 0.9: # resume
       self.resume()
    if self.is_paused:
       continue # do nothing else only wait for input (`x`)
                # assume your_condition() has no side-effects

    # here's what the resumed version does:
    print("...")
    # change self.__points, etc

正如您所看到的,实现非常简单。

您应该向我们展示您的代码,最好是说明您的问题的简化版本,这样我们就可以清楚地理解您所说的内容。FWIW,在CLI程序中实现暂停/延迟通常使用与GUI程序中所需策略稍有不同的策略。但我想,如果您了解如何使用CLI版本,那么使用GUI版本可能会更容易。这是非常重要的。基本上,您需要连续循环,以非阻塞的方式从用户处读取击键,并且仅当已读取击键时,才在程序中切换内部暂停状态。但是,以非阻塞方式(无需使用多线程)敲击单个键盘是非常特定于平台的。我已经添加了一些代码,到目前为止,我已经添加了这些代码。您应该从更基本的事情开始,例如在运行游戏时如何接受用户输入的键盘/鼠标。一旦你知道了这一点;添加暂停/恢复方法很简单。例如,看看pygame框架是如何实现的。我如何在Shell(CLI)中实现accept input?我的计划是以后使用tkinter作为GUI。我知道这在GUI中更容易实现,但我的任务是在GUI和CLI中实现。@Tennisfan实际上time.sleeps不与键盘中断或您所说的按键连接。它只是暂停程序执行几秒钟。@d-coder-1因为time.sleep绝对不适合OP的用途。他想实现一个由按键启动和终止的暂停/取消暂停机制,而不是在预先知道的给定时间内暂停。我知道输入是这样工作的。但是,我必须在暂停之后和暂停之前都有一个代码,与whit time.sleep完全相同,因为我不知道用户何时想要暂停,所以我没有这个代码。删除了my-1,因为这实际上是一种工作方式。不过也有一些严重的缺点:您仅限于将暂停操作绑定到KeyboardInterrupt CTRL+C,例如,您不可能使用此方法将其绑定到p键。正因为如此,您还可以像往常一样,消除使用CTRL+C终止程序的可能性。您可以编写应该一直发生的内容,直到出现键盘中断。若用户在程序执行时按下某个按钮,那个么它将停止给出该消息。接下来,如果用户按quit,则编写退出脚本的代码,否则请编写恢复脚本后应发生的代码,我理解这一点,并且在其他TA中可能有用
在本例中,根据x设置条件时,ks是您提到的。但它应该保持打印分数,与x的值无关。但感谢您在更容易决定是否暂停的情况下显示实现PauseFunction。那么continue只返回循环的开头,对吗?@Tennisfan:是的,continue跳过循环的其余部分。它应该独立于x的值打印-在您的情况下,暂停意味着什么?我假设这意味着在游戏暂停时,不应打印或重新计算分数。注意:x只是用户输入的一个占位符。在实际的程序中,应该使用一些事件而不是x,例如:用户按下键盘上的“p”键。关于暂停的工作方式,您是正确的。不过,我有一些误解,因为我在代码中使用了一个变量x,它不会影响最终的暂停条件。
def __init__(self):
    self.is_paused = False
def pause(self):
    self.is_paused = True
def resume(self):
    self.is_paused = False