首页 > 解决方案 > 完全捕获对 GNU 屏幕的调用输出

问题描述

在我的一个 Python 3 程序中,我在某个时候打开了一个 GNU 屏幕会话。关闭此会话后,输出

[screen is terminating]

打印到周围的会话(运行 python 程序的终端)。我该如何防止这种情况?

我目前正在运行类似

import subprocess 
subprocess.run('screen',stdout=subprocess.PIPE,stderr=subprocess.PIPE)

通常,[stdout,stderr]=subprocess.PIPE捕获输出和错误(例如,run('echo hello',stdout=subprocess.PIPE)没有打印)但由于某种原因,这不适用于screen

标签: pythonsubprocessstdout

解决方案


如果您不想在控制台上打印任何内容,您应该捕获stderr以及。stdout

Screen也可能检测到这stdin是一个 tty 并将其用于 I/O。不过,我不知道是否给它一个管道或/dev/null会解决问题。试试看它是否有效。

Screen很可能需要访问tty设备才能工作。您可以为它创建一个 tty(通过打开/dev/ptmx并提供screen相应的/dev/pts/N文件),但这绝不是微不足道的。


推荐阅读