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