【问题标题】:How to break a command execution in Python?如何在 Python 中中断命令执行?
【发布时间】:2012-08-01 22:38:38
【问题描述】:

我在输入时使用的是 PySerial

serialObject.read()

并且执行挂起等待一些串行数据。 如何中止这个命令?我想输入新命令并忽略这个。 我在 Windows 上使用 IDLE,Ctrl+C 似乎不起作用。

【问题讨论】:

  • Ctrl-C 应该可以工作,你会得到一个KeyboardInterrupt。较低级别的某些东西正在挂起进程,或者 PySerial 可能正在捕获我认为的异常
  • 如果这是通过 Python/C API 分派到 C 代码,信号处理通常会在该过程中被丢弃。我对向 Windows 中的进程发送信号一无所知,或者我可以提供更多建议。 ;)
  • 我可以通过使用serialObject.timeout = 1 完全避免这种情况,这样它就不会无限期挂起

标签: python windows python-idle pyserial


【解决方案1】:

如果在时间限制之前没有收到数据,则将 PySerial 配置为超时。如果您没有超时,那么您唯一的选择是要求操作系统终止该进程。

【讨论】:

    【解决方案2】:

    您是否尝试过向 CTRL-C 发送垃圾邮件? 不知道为什么,但有时我必须反复按 CTRL+C 才能退出该死的程序。

    您也可以尝试使用以下方式劫持 CTRL-C:

    import signal
    import sys
    def signal_handler(signal, frame):
            print 'You pressed Ctrl+C!'
            sys.exit(0)
    signal.signal(signal.SIGINT, signal_handler)
    

    但如果正常的 CTRL+C 不起作用,我不确定这是否真的有帮助。

    【讨论】:

    • pyserial 显然有键盘中断问题-____-。似乎 x03 被解释为 CTRL+C 但我不确定为什么会这样/如果它有效。不过值得一试。 pastebin.com/bGQLc1wk
    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多