【发布时间】:2015-05-09 14:24:09
【问题描述】:
我正在尝试将命令的输出分配给变量,而命令不会认为它正在通过管道传输。这样做的原因是,有问题的命令在通过管道传输时会给出未格式化的文本作为输出,但如果是从终端运行,它会给出彩色格式的文本。我需要得到这个颜色格式的文本。
到目前为止,我已经尝试了一些事情。我已经像这样尝试过 Popen:
output = subprocess.Popen(command, stdout=subprocess.PIPE)
output = output.communicate()[0]
output = output.decode()
print(output)
这将让我打印输出,但它给了我在命令通过管道时得到的未格式化输出。这是有道理的,因为我在 Python 代码中使用了管道。但是我很好奇是否有一种方法可以将此命令的输出直接分配给一个变量,而无需该命令运行其自身的管道版本。
我还尝试了以下依赖 check_output 的版本:
output = subprocess.check_output(command)
output = output.decode()
print(output)
我再次得到与命令通过管道传输时命令返回的相同的未格式化输出。
有没有办法获得格式化的输出,当它没有被管道传输时,命令通常会从终端给出输出?
【问题讨论】:
-
我认为“着色”是 shell/tty 的一个功能。颜色不是命令输出的一部分。因此,除了这个未格式化的输出之外,您将无法检索任何其他内容。
-
嗨 EddyG,有时确实如此,但您可以自己将颜色格式代码发送到终端。在这种情况下就是这种情况。我仔细检查了命令本身的 C 源代码,它确实发送了颜色格式代码。所以它不仅仅是 tty。
标签: python linux bash subprocess popen