【问题标题】:How can I use a raw_input with twisted?如何使用带扭曲的 raw_input?
【发布时间】:2011-02-28 14:34:17
【问题描述】:

我知道 raw_input 不能用于twisted。然而,这是我想要的应用程序。

我有一个提供交​​互式终端串行端口的硬件。我正在尝试连接到此端口并以异步方式发送命令。我需要这种方式,因为这是一个电机控制器,一旦我发出命令,它就会“阻塞”并逃跑(我当前的代码)。如果出现问题或危险,我需要能够输入另一个命令,例如 ESTOP。

我已经阅读了一些关于 twisted.internet.stdio.StandardIO 的内容,但是我运气不佳.. 任何关于这方面的建议/帮助都会很棒。

【问题讨论】:

    标签: python serial-port twisted


    【解决方案1】:

    您可以在这里使用几个选项。一种是使用子进程来处理与串行端口的通信,并使用管道在父子进程之间进行通信(通过 Twisted 的进程协议进行了简化)。另一个是分离一个单独的 Python 线程并从那里使用 raw_input。正常的线程间通信机制在 Twisted 上工作得很好。唯一真正的扭曲来自于你如何从单独的线程中唤醒扭曲的反应器。主要支持的机制是使用reactor.callFromThread()。在 Twisted 中使用线程需要仔细考虑,而且很容易搞砸(这就是为什么通常不鼓励使用),但有时它确实是适合这项工作的工具。

    【讨论】:

      【解决方案2】:

      您看过 StandardIO 示例吗? Twisted core examples 中有一对,stdin.py 和 stdiodemo.py。有a more advanced example 涉及Twisted Conch 中的行编辑和历史记录。你可以用python -m twisted.conch.stdio 运行这个来查看它的运行情况。 Conch 示例可能仅适用于 POSIX 平台,而不适用于 Windows。

      【讨论】:

      • stdin.py 和 stdiodemo.py 示例非常初级。例如,它们没有展示如何进行行编辑、历史记录、制表符补全或其他人们习惯于从 readline 界面中使用的功能。高级示例只是展示了 ConsoleManhole。如果我想输入不是 python 代码的自定义命令怎么办?代码中的 TerminalProcessProtocol 是做什么的?它似乎没有在任何地方被引用。
      • 是的,我最终可能会。但首先我会尝试自己与扭曲和 readline 作斗争(这就是为什么我一直在寻找合适的教程),如果这没有任何结果,我可能会提出一个关于我卡在哪里的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多