的Python:何时使用pty.fork()与os.fork()
题
我不确定是否从我应用产卵外部的后台进程时使用pty.fork()
或os.fork()
。 (如国际象棋引擎)
我想死的产生的进程如果父被杀死,与在终端产卵的应用程式。
什么是两个叉之间的起伏?
解决方案
与os.fork()
创建子进程继承标准输入/输出/ stderr的从父进程,同时与pty.fork()
创建的子被连接到新的伪终端。当你写xterm这样一个程序,你需要的更新:在pty.fork()
父进程返回一个描述符来控制子进程的终端,这样就可以在视觉上从它表示数据和翻译用户动作到终端的输入序列
<强>更新强>
从PTY(7)手册页:
这预计要连接的方法 给终端,可以打开从动端 一个的伪终端,然后是 由具有程序驱动 打开了主端。凡是 在主端被写入是 提供给处理上的从 结束,因为虽然它的输入上键入 的终端。例如,写 中断字符(通常 控制-C)向主设备 将产生一个中断信号 为要生成(SIGINT) 前台进程组即 连接到所述从机。反过来, 被写入任何东西 伪终端罐的从动端 通过该方法也就是被读 连接到主端。
其他提示
在过去,我一直使用的subprocess
模块这一点。它提供了一个好的API用于与子进程进行通信。
您可以使用call(*popenargs, **kwargs)
阻止他们的执行,我相信使用Popen
类可以处理异步执行。
查看文档获得更多信息。
至于使用os.fork
VS pty.fork
,两者都是高度依赖于平台的,并且也不会工作(或至少被测试)用的窗口。该pty
模块似乎更通过读取文档的约束两个。主要的区别是所述伪终端方面。所以,如果你不愿意你的建筑师这样的代码,以便能够使用subprocess
模块,我可能会去与os.fork
代替pty.fork
。
Pseudotermials是必要的,真正期望的终端一些应用。交互shell是其中一个例子,但还有很多其他的。所述pty.fork选项是不存在作为其它os.fork但作为一个特定的API使用伪终端。