为什么寻呼机不能用 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不能做分页。
当服务器端需要分页时,服务器端应该实现分页。
我 运行 这个 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不能做分页。
当服务器端需要分页时,服务器端应该实现分页。