为什么寻呼机不能用 less 命令打开?

Why does pager not opening with less command?

我 运行 这个 python 脚本执行命令并将其输入和输出连接到端口上的客户端。

import getpass
import socket
import subprocess
username = getpass.getuser()
host = socket.gethostbyname('')
port = 443
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connection = None
while connection is None:
    try:
        connection = s.connect((host, port))
        s.send("[+] We are connected to %s" % username)
        while True:
            try:
                exec_code = s.recv(1024)
                if exec_code == "quit":
                    break
                else:
                    print "1"
                    proc = subprocess.Popen("less data.txt", shell=True, stdout=s, stdin=s)
                    proc.wait()

                    print "2"
            except Exception, err:
                print err
    except Exception, e:
        print e
s.close()

我面临的问题是 less 命令在客户端打印输出但不打开寻呼机。 关于如何解决这个问题的任何想法。

问题是程序 less 没有将 stdin 和 stdout 用作普通流。 less 是一个终端程序,使用 terminfo 或 termcap 来控制终端获取终端能力。当 python 程序执行 less 时,它的 stdout 和 stdin 没有绑定到任何终端,而是绑定到套接字。例如,less 没有机会获得终端大小,因此它无法执行分页。它类似于调用这些微不足道的命令时的情况:

less data.txt
less data.txt | cat

前面的命令进行分页。后面的命令只是将文件打印到stdout,因为less的stdout不是终端而是管道,less不能做分页。

当服务器端需要分页时,服务器端应该实现分页。