【问题标题】:Completely capture output of call to GNU screen完全捕获对 GNU 屏幕的调用输出
【发布时间】:2018-08-09 10:41:28
【问题描述】:

在我的一个 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

【问题讨论】:

    标签: python subprocess stdout


    【解决方案1】:

    如果您不想在控制台上打印任何内容,您应该捕获 stderrstdout

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

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

    【讨论】:

    • 我相信你是对的。当我更改stdin 时,我确实得到stdout 内容,即“屏幕必须连接到终端”(或类似的东西)“。你的提议对我来说太难了,我相信。我有另一个解决方案:只需删除使用'\b', '\033[F', '\033[K' 编写的内容。不幸的是,screen 并不总是以相同的终端输出结束,你知道有一种方法可以读取终端上打印的屏幕吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多