【问题标题】:Displaying images in linux terminal using Python使用 Python 在 linux 终端中显示图像
【发布时间】:2018-04-23 17:27:33
【问题描述】:

我正在尝试使用 w3mimgdisplay 在图像终端上显示图像,并且正在查看Ranger 文件管理器的源代码。我正在查看的文件可以在 here 找到。

用这个,我做了一个简单的程序。

import curses
from subprocess import Popen, PIPE

process = Popen("/usr/libexec/w3m/w3mimgdisplay",
                stdin=PIPE, stdout=PIPE, universal_newlines=True)

process.stdin.write("echo -e '0;1;100;100;400;320;;;;;picture.jpg\n4;\n3;'")
process.stdin.flush()
process.stdout.readline()
process.kill()

每当我进入

echo -e '0;1;100;100;400;320;;;;;picture.jpg\n4;\n3;' \ /usr/libexec/w3m/w3mimgdisplay

进入终端,它会正确打印图像,但是,运行 python 脚本什么也不做。如何将程序的输出写入终端?

【问题讨论】:

  • 我认为您在字符串末尾缺少新行。 echo 写了一个。不写。
  • 我在 mac (pip install imgcat) 上使用了 imgcat - 它是微不足道的 imgcat(test.jpg) - 但在 ubuntu 上不起作用。

标签: python linux popen


【解决方案1】:

shell echo 命令在其输出的末尾添加换行符(除非您使用了您没有使用的 -n 开关),因此您还需要通过在命令末尾添加换行符来模仿它。

此外,您应该编写字符串内容,而不是 echo 命令本身,因为这是直接发送到 w3mimgdisplay 进程,而不是发送到 shell。

我也不确定为什么readline。我建议改用.communicate() 命令,因为它可以确保您不会陷入罕见但可能的读/写缓冲区争用情况。或者,最好的方法,直接使用更简单的subprocess.run()

import subprocess
subprocess.run(["/usr/libexec/w3m/w3mimgdisplay"], 
    input=b'0;1;100;100;400;320;;;;;picture.jpg\n4;\n3;\n')

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 2016-06-24
    • 2017-04-12
    • 1970-01-01
    • 2012-08-27
    • 2020-11-04
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多