【问题标题】:Most efficient way to stop running a part of code [closed]停止运行部分代码的最有效方法[关闭]
【发布时间】:2018-08-21 15:28:30
【问题描述】:

我正在用 Python 编写个人助理。此刻,我正在计划我要做的所有事情,但我想出了一个我无法解决的问题。

我将运行一个主脚本,该脚本将检查用户是否每 3 秒说出'Hello'。如果他这样做了,那么它应该开始运行另一个脚本/函数并停止当前的。执行任务后,它应该再次开始运行主脚本(我将为每个任务使用不同的脚本以使其更清晰)。我曾考虑过一个 while 循环,但我不确定这是否是最佳选择。

【问题讨论】:

  • 你可以考虑启动一个子进程 import subprocess result = subprocess.run(['python', 'myscript'], stdout=subprocess.PIPE)
  • 基于这个问题和你的个人资料,我建议你做一些不那么雄心勃勃的事情。不是放弃你的项目,这看起来很整洁,可能值得,而是把它分解成更小的任务,你可以自学如何去做。我可以告诉你,Python 很好地支持了多个进程,但是这里的 while 循环可能不是一个理想的选择(尽管它可能不是太糟糕,这取决于实际的程序)。但这现在对你没有多大帮助。
  • 编码的一个主要部分是好的设计。通过良好的设计,您可以编写个人助理,从初学者开始(完成后您不会成为初学者)。好的设计的很大一部分是弄清楚如何将所有东西分解成可以很好地协同工作的可管理的块。如果你能做到这一点,你就可以开始学习让每个组件工作所需的知识,而不是试图将一本 Python 教科书融入一个答案。
  • @Gerard。祝你好运。这是一个很好的项目,你会学到很多东西。我怀疑如果你坚持下去,你最终会写出很多有用的东西。
  • 最好将多个问题作为多个帖子提出。也就是说,第二个问题太模糊而无法得到有用的回答。我建议查找自然语言处理。

标签: python python-3.x artificial-intelligence


【解决方案1】:

select 系统调用是一种非常有效的方法,可以等待文件准备好读取后再执行操作:

import select
import sys

while True:
    reads, _, _ = select.select([sys.stdin], [], [], 3)
    if reads:
        line = reads[0].readline()
        if line.strip().lower() == "hello":
            # do a thing
            print("hi")

一旦hello 被读取,并且您的函数或进程被执行,您的程序将返回读取stdin

请注意,这适用于 POSIX 系统,但不适用于 Windows(套接字除外)。

【讨论】:

  • 这似乎在 Ubuntu 中有效,但在 Windows 中无效(套接字除外),因此最好指定它。
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 2013-10-09
  • 2021-05-02
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多