使用Python在linux终端中显示图像

时间:2018-04-23 17:27:34

标签: python linux popen

我正在尝试使用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脚本什么都不做。如何将程序输出写入终端?

1 个答案:

答案 0 :(得分: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')