鱼C论坛

 找回密码
 立即注册
查看: 3357|回复: 11

[已解决]python 多进程中使用 input() 报错的问题

[复制链接]
发表于 2021-11-24 13:07:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2021-11-24 13:08 编辑

子进程要打开标准输入输出流才能输入输出
  1. import sys
  2. import os
  3. import multiprocessing


  4. def fun1(mainpid):
  5.     if os.getpid() != mainpid:  # os.getpid()获取当前进程id,如果跟mainpid不相等则说明是新进程
  6.         print("是子进程,打开标准输入输出流...")
  7.         # 以下两句为子进程打开标准输入输出流
  8.         sys.stdin = os.fdopen(0, "r")  # 打开标准输入流
  9.         sys.stdout = os.fdopen(1, "w")  # 打开标准输出流
  10.     s = input("请输入:")
  11.     print(s)


  12. if __name__ == "__main__":
  13.     mainpid = os.getpid()  # 获取当前进程id
  14.     proc1 = multiprocessing.Process(target=fun1, args=(mainpid,))

  15.     # 不能像下面一行这样将子进程设置为守护进程,否则主进程结束后子进程也跟着结束,一样不能输入
  16.     # 如果一定要用这句设置守护进程,那主进程应该等待子进程结束,即末尾加 proc1.join()
  17.     # proc1.daemon = True

  18.     proc1.start()
  19.     # proc1.join()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-11-24 19:42:50 | 显示全部楼层
阳间祝福 发表于 2021-11-24 19:17
哦哦,那路或多~

是不是说,如果不打开标准输入输出流,程序就不知道目前的输入是要传给子进程还是主进 ...

不是避免模糊,每个进程都有自己的标准输入输出流,而子进程默认不打开标准输入输出,所以要手动打开
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-4 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表