【问题标题】:Why does pager not opening with less command?为什么寻呼机不使用更少的命令打开?
【发布时间】:2021-03-18 18:45:55
【问题描述】:

我正在运行这个 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 命令在客户端打印输出但不打开寻呼机。 有关如何解决此问题的任何想法。

【问题讨论】:

    标签: python sockets subprocess pager


    【解决方案1】:

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

    less data.txt
    less data.txt | cat
    

    前一个命令进行分页。后面的命令只是将文件打印到标准输出,因为less的标准输出不是终端而是管道,而less不能进行分页。

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

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多