场景:在Python中使用multiprocessing模块的Process创建子进程,试图在子进程中获取键盘输入。

使用input()

在子进程中使用input()会弹出报错信息:EOFError: EOF when reading a line。

代码示例

from multiprocessing import Process
import sys def test_input():
info = input()
print("start print info!")
print(info) if __name__ == "__main__":
print("start progress!")
Process(target=test_input).start()

结果输出

start progress!
Process Process-1:
Traceback (most recent call last):
File "D:\software\Python\lib\multiprocessing\process.py", line 258, in _bootstrap
self.run()
File "D:\software\Python\lib\multiprocessing\process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "D:\text_project\python\验收2\test.py", line 5, in test_input
info = input()
EOFError: EOF when reading a line Process finished with exit code 0

使用sys.stdin.readline()

在子进程中使用sys.stdin.readline(),发现并不会等待键盘输入。

代码示例

import sys
from multiprocessing import Process def test_input():
info = sys.stdin.readline()
print("start print info!")
print(info) if __name__ == "__main__":
print("start progress!")
Process(target=test_input).start()

结果输出

start progress!
start print info! Process finished with exit code 0

使用fn=sys.stdin.fileno()

在主进程中敲写代码fn=sys.stdin.fileno(),然后将获取到的文件描述符fn传入子进程,子进程敲写代码sys.stdin = os.fdopen(fn),然后就可以正常使用sys.stdin.readline()获取键盘输入了。

代码示例

import os
import sys
from multiprocessing import Process def test_input(fn):
sys.stdin = os.fdopen(fn)
info = sys.stdin.readline()
print("start print info!")
print(info) if __name__ == "__main__":
print("start progress!")
fn = sys.stdin.fileno()
Process(target=test_input, args=(fn, )).start()

结果输出

start progress!
this is my input.
start print info!
this is my input. Process finished with exit code 0

如何在Python中的子进程获取键盘输入的更多相关文章

  1. 如何在Python中从零开始实现随机森林

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱. 根据您的测试数据样本构建多个模型(称为套袋)可以减少这种差异,但是 ...

  2. 如何在Python中使用Linux epoll

    如何在Python中使用Linux epoll 内容 介绍 阻塞套接字编程示例 异步套接字和Linux epoll的好处 epoll的异步套接字编程示例 性能考量 源代码 介绍 从2.6版开始,Pyt ...

  3. 面试官问我:如何在 Python 中解析和修改 XML

    摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...

  4. Java编程中获取键盘输入实现方法及注意事项

    Java编程中获取键盘输入实现方法及注意事项 1. 键盘输入一个数组 package com.wen201807.sort; import java.util.Scanner; public clas ...

  5. 在Delphi中使用键盘勾子获取键盘输入(译--5月7日)

    http://blog.sina.com.cn/s/blog_502b2e970100949s.html 获取键盘输入以控制无法接受输入焦点的控件考虑一些游戏,显示图片在TPainBox,但是TPai ...

  6. 【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?

    原文:[msdn wpf forum翻译]如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点? 原文链接:http://social.msdn.microsoft.com/Fo ...

  7. 如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline

    如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the ac ...

  8. 如何在Python 中使用UTF-8 编码 && Python 使用 注释,Python ,UTF-8 编码 , Python 注释

    如何在Python 中使用UTF-8 编码 && Python 使用 注释,Python ,UTF-8 编码 , Python  注释 PIP $ pip install beauti ...

  9. 如何在Python中加速信号处理

    如何在Python中加速信号处理 This post is the eighth installment of the series of articles on the RAPIDS ecosyst ...

  10. Python常见面试题017: Python中是否可以获取类的所有实例

    017. Python中是否可以获取类的所有实例 转载请注明出处,https://www.cnblogs.com/wuxianfeng023 出处 https://docs.python.org/zh ...

随机推荐

  1. 组合式api-计算属性computed的使用

    计算属性在vue3中和vue2的思想概念都是一样,唯一区别就是在使用组合式api时候的语法稍有不同. 使用步骤: 导入computed函数 import {computed} from 'vue' 使 ...

  2. loader编写小记

    此项目在一些大佬的基础上进行了修改,或许能提供一些思路.还在学习中很菜很菜,不足之处还请师傅们多多指点 tips 对shellcode使用AES + Base85加密后以txt保存在远端供下载. 针对 ...

  3. 欧拉定理 & 扩展欧拉定理 笔记

    欧拉函数 欧拉函数定义为:\(\varphi(n)\) 表示 \(1 \sim n\) 中所有与 \(n\) 互质的数的个数. 关于欧拉函数有下面的性质和用途: 欧拉函数是积性函数.可以通过这个性质求 ...

  4. PyTorch项目源码学习(1)

    PyTorch PyTorch是一个开源的深度学习框架,项目地址 https://github.com/pytorch/pytorch 在学术工作中的使用频率较高.其主体由C++开发,PyTorch是 ...

  5. CodeForces 808G Anthem of Berland 前缀函数 KMP DP

    原题链接 题意 第一行给我们一串长为s,只包含小写字母与问号的字符串A,第二行给我们一个长为t只有小写字母的字符串B, 同时满足 $ s * t \le 1e7 $ 我们可以把问号变成任意的字母,我们 ...

  6. POJ 3003 DP 寻路 记录路径

    POJ 3003 DP 寻路 记录路径 我一开始把M看成是每个a_i的上限了,这是致命的,因为这个题dfs暴力搜索+剪枝是过不了的因为M<=40,全部状态有2的四十次幂. 正解是DP,设dp[i ...

  7. flex布局之美,以后就靠它来布局了

    写在前面 在很久很久以前,网页布局基本上通过table 元素来实现.通过操作table 中单元格的align 和valign可以实现水平垂直居中等 再后来,由于CSS 不断完善,便演变出了:标准文档流 ...

  8. 【玩转鲲鹏 DevKit系列】如何快速迁移无源码应用?

    本文分享自华为云社区<[玩转鲲鹏 DevKit系列]如何快速迁移无源码应用?>,作者: 华为云社区精选. 为了帮助广大用户和开发者快速将无源码应用从 x86 迁移到鲲鹏,鲲鹏 DevKit ...

  9. Kubernetes的拐点助推器:左手开源,右手边缘计算

    摘要:KubeEdge 是首个基于 Kubernetes 扩展的,提供云边协同能力的开放式智能边缘计算平台,也是 CNCF 在智能边缘领域的首个正式项目.依托 Kubernetes 强大的容器编排和调 ...

  10. 跟着B站UP主小姐姐去华为坂田基地采访扫地僧

    摘要:谁说程序员就只能写代码呢!华为扫地僧的才艺是完全可以solo出道的那种. 忍不住想要和你们分享下我9月份的快乐呀!Mark下最近完成的一件超了不起的事情!我去你们口中别人家的公司-华为啦!这次采 ...