python中的spawn和popen方法的本质区别?

spawn指pty模块的生成一个进程,并将其控制终端连接至当前进程标准IO;Popen指subprocess模块的生成子进程方法。那么这二者有何区别?从操作系统的角度而言呢?

阅读 9.4k
2 个回答
  1. 这两个从 Python 级别上面就不同, spawn 只是一个函数,Popen是一个类;
  2. spawn 是通过 fork 方式实现,然后子进程执行具体的命令,然后父进程去获取终端的输出,强调获取数据而已, 而 subprocess 提供更多进程信息的管理,比如说执行命令的状态码,子进程通信和回收等;
  3. spawn 和 操作系统的 popen系统调用,反而就是有点类似了。

研究了一下源码,发现spawn是通过把子进程三个标准IO直接跟伪终端的slave端绑在一起来实现读取/写入数据的,而与管道等其他数据共享方式无关。希望能对有需要的各位有所帮助。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题