如何中止在 python3 中等待 sys.stdin?

Posted

技术标签:

【中文标题】如何中止在 python3 中等待 sys.stdin?【英文标题】:How to abort waiting for sys.stdin in python3? 【发布时间】:2016-11-20 06:11:24 【问题描述】:

我正在运行一个包含两个线程的脚本,一个从子进程读取的线程和一个主线程。

在主线程中,我正在阅读stdin,如下所示:

for line in sys.stdin:

    if proc.poll() != None:
        break

    proc.stdin.write(line)
    proc.stdin.flush()

    <other things happen here>

proc 是外部子进程)

现在,这很好,直到我想关闭我的程序。当另一个线程中的进程退出时,我希望整个程序停止,但是主线程仍然在等待输入东西到stdin。我怎样才能中止它?

基本上,我希望stdin 收到EOF 的信号,但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

我会交换线程。从主线程中的子进程读取,并在另一个线程中执行阻塞sys.stdin 的东西。这样您就可以将daemon=True 传递给threading.Thread,这会使主线程退出时线程退出。

【讨论】:

以上是关于如何中止在 python3 中等待 sys.stdin?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中,我将如何立即中止 HTTP 连接,不再发送数据包。客户端应继续等待,直到浏览器内部超时

如何中止 LocalServerSocket.accept

如何中止公牛队列中的特定任务?

如何中止winsock阻塞调用?

srun 在循环中使用: srun:作业步骤中止:等待作业步骤完成最多 32 秒

如何在 n 秒内中止 bash 脚本 [重复]