python程序如何让其暂停

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python程序如何让其暂停相关的知识,希望对你有一定的参考价值。

我需要让python程序可以在输入某个字符之后暂停执行,然后等待输入,当再次输入之后恢复程序的执行。请问一下这种效果要如何实现呢?谢谢!!!

你是ython3还是Python2?它们运行暂停的方法也有所不同,以python3为例:

1、input();

这种方法不用包含模块,因此这也是最常用的一种暂停手段。

Python2中的raw_input()和input()语句在Python3中已经被合并到input()中。

2、os.system("pause");

这种方法需要包含os模块(import os),在windows下IDLE运行会弹出cmd命令行,

进行暂停操作,直接运行.py文件会直接在命令行中暂停。

3、time.sleep("second");

这种方法需要包含time模块(import time),second是自定义的时间长短,根据实际情况,追问

但是我是要做成当输入某一个字符的时候才会暂停,不输入就继续执行的效果。如果是用input()的话会一直等待吧?另外如果是time.sleep()的话就需要提前写好运行到哪里就暂停,但我现在就是不固定什么时候会暂停,只有输入才会。

参考技术A 那你就是这个程序要执行多次,那可以用input()吧?每次执行完都问是否要继续,如果yes就继续,no就暂停

在 Python 中暂停执行

【中文标题】在 Python 中暂停执行【英文标题】:Pause Execution in Python 【发布时间】:2014-07-18 23:32:16 【问题描述】:

我正在实现一个 Python 插件,它是一个更大的 C++ 程序的一部分。该程序的目标是允许用户在 Python 中输入命令的操作。它当前从 C++ 函数接收字符串并通过 exec() 函数运行它。然后,用户可以使用 API 来影响更大的 C++ 程序的更改。

我正在开发的当前功能是暂停执行功能。它需要记住它在代码执行中的位置以及任何局部变量的状态,并在满足条件后恢复执行。我对 Python 不是很熟悉,希望得到一些关于如何实现此功能的建议。我的第一个设计理念:

1) 使用 yield 命令。 一开始这似乎是一个好主意,因为当您使用下一个命令时,它会记住我需要的所有内容,但问题是,据我所知,yield 只会返回到调用堆栈中的上一个级别。因此,如果用户调用一个产生它的函数,它将简单地返回到用户的代码,而不是更大的 C++ 程序。据我所知,没有办法将 yield 命令向上传播???

2) 线程 创建一个主 python 线程,为每个命令创建一个线程。该主线程将为每个执行的命令生成一个线程,并在完成时将其杀死。如果它需要暂停并重新启动,它可以通过锁队列来完成。

这是我想出的仅有的两个选项。我不确定 yield 函数会起作用,或者它的设计目的是什么。我认为 Threading 方法会起作用,但可能有点矫枉过正,并且需要很长时间来开发。我也在寻找某种 Python 中的任务模块,但找不到我想要的东西。我想知道是否有人有任何其他建议,因为我对 Python 不是很熟悉。

编辑:正如 cmets 中所述,我没有解释脚本“暂停”时需要发生什么。 python插件需要允许C++程序继续执行。在我看来,这意味着 A) 如果我们谈论的是单线程方法,则返回,或者 B) 向 C++ 发送消息(函数调用?)

编辑编辑:如前所述,我没有完全解释问题描述。我将发表另一篇文章,更好地说明当前存在的内容、需要发生的事情以及提供一些 sudo 代码。我是 Stack Overflow 的新手,所以如果这不是适当的回复,请告诉我。

【问题讨论】:

我理解个别的话,但我认为你需要用伪代码或其他东西表达你的问题......我不明白你的问题是什么......time.sleep将使python脚本暂停...但我很确定这不是你在这里问的内容 我同意这一点。您需要解释仅让脚本暂停给定时间段无法实现的目标。目前很难准确掌握您想要做什么。 感谢您帮助澄清我需要在问题陈述中包含的内容。 【参考方案1】:

无论何时在 Python 中发送信号,执行都会立即暂停,直到正在使用的任何信号处理函数执行完毕;那时,执行会从中断的地方继续执行。我的建议是使用用户定义的信号之一(signal.SIGUSR1signal.SIGUSR2)。在此处查看signal 文档:

https://docs.python.org/2/library/signal.html

在程序开始时,您将定义一个信号处理函数,如下所示:

def signal_pause(signum, frame):
  if signum == signal.SIGUSR1:
    # Do your pause here - function processing, etc
  else:
    pass

然后在主程序的某处,您将为刚刚创建的那个切换默认信号处理程序:

signal.signal(signal.SIGUSR1, signal_pause)

最后,当你想暂停时,你会像这样发送SIGUSR1 信号:

os.kill(os.getpid(),signal.SIGUSR1)

您的代码将立即暂停,保存其状态,然后前往signal_pause 函数执行您需要执行的任何操作。一旦该函数退出,程序将恢复正常执行。

编辑:这假设您在暂停程序时想要做一些复杂的事情。如果您只想等待几秒钟或要求一些用户输入,有一些更简单的方法(分别为time.sleepinput)。

编辑编辑:假设您使用的是 Unix 系统。

【讨论】:

感谢您的回答!这将是一个理想的解决方案,但该系统部署到多个平台。我想我需要一个无需操作系统调用即可工作的解决方案。 @Brian 啊,好吧。也许套接字连接更适合您?通过套接字向 C++ 发送一条消息,告诉它继续,然后在 Python 脚本继续之前等待回复?我不知道它们有多普遍,但它们几乎是进程间通信的标准。【参考方案2】:

如果您需要与 C 程序进行通信,那么套接字可能是最佳选择。

https://docs.python.org/2/library/socket.html

您的两个程序中的一个作为套接字服务器,另一个作为套接字客户端连接到它。当您希望 C++ 程序继续时,您可以使用socket.send() 来发送一条继续消息。然后,您的 Python 程序将使用socket.recv(),这将导致它等待直到收到来自 C++ 程序的消息。

如果您需要两个程序相互发送信号,这可能是最安全的方法。

【讨论】:

以上是关于python程序如何让其暂停的主要内容,如果未能解决你的问题,请参考以下文章

python TKinter的主窗口运行程序完毕后,怎么让其自动关闭

暂停 Python 程序的正确方法

如何让C#程序在执行中暂停一段时间

在 Python 中暂停执行

暂停一个while循环,而不是我在Python中的其余程序

pycharm 暂停线程怎么解决