Python:与* nix中正在运行的进程的STDIN / OUT交互

有没有办法将控制台的STDIN / STDOUT连接到已经运行的进程?

使用案例:

我有一个python脚本,它使用popen在命令行上运行另一个python脚本.

假设foo.py运行popen来运行python bar.py.

然后输入bar.py块.我可以得到python bar.py的PID.有没有办法将新的控制台附加到正在运行的python实例,以便能够以交互方式工作?这特别有用,因为我想在bar.py中运行pdb.

解决方法:

没门.但是你可以修改你启动bar.py的方式,以便准备好接管stdin和stdout.

一个简单的方法是创建命名管道并在Popen调用中将它们作为stdin / stdout提供.然后,您可以从shell(exec< pipe1> pipe2)连接到这些管道并进行交互.这样做的缺点是必须连接到管道以查看进程正在执行的操作.虽然您可以通过在日志文件上使用tee来解决这个问题,但根据bar.py的终端功能需求,这种交互可能不是最大的乐趣.

更好的方法是将GNU screentmux等终端多路复用器合并到进程树中.这些工具可以创建运行应用程序的虚拟终端.然后,您可以随时将任何其他终端连接和分离到此终端缓冲区.在您的特定情况下,foo.py将运行screen或tmux,它将在完整的(VT100)终端仿真中运行python bar.py.也许这会解决你的问题.

上一篇:C++ 中 freopen()函数的用法


下一篇:Python线程stdin / stdout