Eclipse Oxygen中Python3.6多进程代码input()无法获取控制台输入问题
解决Eclipse中Python多进程子进程无法读取控制台输入的问题
这个问题我之前也碰到过,核心原因是Eclipse的控制台默认只把输入流绑定到主进程,子进程无法直接获取控制台的输入,所以你在子进程里调用input()会卡住或者触发EOFError。下面给你几个可行的解决办法:
方法1:将输入提前在主进程获取,传给子进程
这是最简单的方案,把需要用户输入的逻辑放在主进程,然后把输入值作为参数传给子进程:
import multiprocessing def function_name(x, user_input): print("We're here") print(user_input) if __name__ == "__main__": # 主进程获取输入 tu = int(input("请输入值:")) # 把输入作为参数传给子进程 p1 = multiprocessing.Process(target=function_name, args=('1', tu)) p1.start() p1.join()
方法2:用进程间通信(管道/队列)传递输入
如果必须在子进程里处理输入逻辑,可以用multiprocessing.Pipe或者Queue让主进程读取输入后传递给子进程:
import multiprocessing def function_name(x, pipe): print("We're here") try: # 从管道接收主进程传递的输入 tu = pipe.recv() print(f"接收到的输入:{tu}") except EOFError: return if __name__ == "__main__": parent_pipe, child_pipe = multiprocessing.Pipe() p1 = multiprocessing.Process(target=function_name, args=('1', child_pipe)) p1.start() # 主进程读取控制台输入,发送给子进程 tu = int(input("请输入值:")) parent_pipe.send(tu) p1.join()
方法3:直接在终端运行代码
既然你已经知道终端里input()能正常工作,这也是个快速的临时方案——直接在终端执行你的脚本:
python your_script_name.py
为什么Eclipse里会有这个问题?因为Eclipse的控制台是通过Java进程托管的,它没有为每个Python子进程单独分配输入流,导致子进程无法捕获用户输入。上面的方法都是绕开这个限制的实用方案。
内容的提问来源于stack exchange,提问作者Kanishk Kumar Gupta
相关产品推荐
相关产品推荐

