如何在Python中获取Linux控制台窗口宽度
有没有办法在python中以编程方式确定控制台的宽度? 我的意思是在没有包装的情况下适合一行的字符数,而不是窗口的像素宽度。
编辑
寻找适用于Linux的解决方案
14个解决方案
228 votes
import os
rows, columns = os.popen('stty size', 'r').read().split()
使用'stty size'命令,根据python邮件列表中的一个线程,它在Linux上是合理通用的。 它将'stty size'命令作为文件打开,从中读取',并使用简单的字符串拆分来分隔坐标。
与os.environ [“COLUMNS”]值(尽管使用bash作为我的标准shell无法访问)不同,数据也将是最新的,而我相信os.environ [“COLUMNS”] value仅在python解释器启动时有效(假设用户从那时起调整了窗口大小)。
brokkr answered 2019-03-04T22:59:05Z
194 votes
不知道为什么它在模块shutil中,但它在Python 3.3中登陆,查询输出终端的大小:
>>> import shutil
>>> shutil.get_terminal_size((80, 20)) # pass fallback
os.terminal_size(columns=87, lines=23) # returns a named-tuple
os模块中有一个低级实现。
现在可以在Python 3.2及以下版本中使用backport:
[https://pypi.python.org/pypi/backports.shutil_get_terminal_size]
Gringo Suave answered 2019-03-04T22:59:48Z
65 votes
使用
import console
(width, height) = console.getTerminalSize()
print "Your terminal's width is: %d" % width
编辑:哦,对不起。 这不是一个python标准的lib,这里是console.py的源码(我不知道它来自哪里)。
该模块似乎是这样的:它检查termcap是否可用,何时可用。 它使用了那个; 如果没有,它检查终端是否支持特殊的ioctl调用,并且也不起作用,它会检查一些shell导出的环境变量。这可能仅适用于UNIX。
def getTerminalSize():
import os
env = os.environ
def ioctl_GWINSZ(fd):
try:
import fcntl, termios, struct, os
cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ,
'1234'))
except:
return
return cr
cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
if not cr:
try:
fd = os.open(os.ctermid(), os.O_RDONLY)
cr = ioctl_GWINSZ(fd)
os.close(fd)
except:
pass
if not cr:
cr = (env.get('LINES', 25), env.get('COLUMNS', 80))
### Use get(key[, default]) instead of a try/catch
#try:
# cr =