有没有办法将控制台的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 screen或tmux等终端多路复用器合并到进程树中.这些工具可以创建运行应用程序的虚拟终端.然后,您可以随时将任何其他终端连接和分离到此终端缓冲区.在您的特定情况下,foo.py将运行screen或tmux,它将在完整的(VT100)终端仿真中运行python bar.py.也许这会解决你的问题.
标签:python,unix,stdin,stdout 来源: https://codeday.me/bug/20190626/1290645.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。