在python中是否有一种方法以编程方式确定控制台的宽度?我指的是一行中不换行的字符数,而不是窗口的像素宽度。
Edit
寻找在Linux上工作的解决方案
在python中是否有一种方法以编程方式确定控制台的宽度?我指的是一行中不换行的字符数,而不是窗口的像素宽度。
Edit
寻找在Linux上工作的解决方案
当前回答
试着“祝福”
我也在找同样的东西。它非常易于使用,并提供了在终端中着色、造型和定位的工具。你需要的很简单:
from blessings import Terminal
t = Terminal()
w = t.width
h = t.height
在Linux中工作就像一个魅力。(我不确定MacOSX和Windows)
在此下载及文件
或者你可以用pip安装它:
pip install blessings
其他回答
不确定为什么它在模块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模块中。跨平台工作在Linux, Mac OS和Windows,可能是其他unix类。还有一个后端口,虽然已经无关紧要了。
试着“祝福”
我也在找同样的东西。它非常易于使用,并提供了在终端中着色、造型和定位的工具。你需要的很简单:
from blessings import Terminal
t = Terminal()
w = t.width
h = t.height
在Linux中工作就像一个魅力。(我不确定MacOSX和Windows)
在此下载及文件
或者你可以用pip安装它:
pip install blessings
上面的代码在我的linux上没有返回正确的结果,因为winsize-struct有4个unsigned shorts,而不是2个signed shorts:
def terminal_size():
import fcntl, termios, struct
h, w, hp, wp = struct.unpack('HHHH',
fcntl.ioctl(0, termios.TIOCGWINSZ,
struct.pack('HHHH', 0, 0, 0, 0)))
return w, h
HP和HP应该包含像素的宽度和高度,但不是。
@reannual的回答很好,但有一个问题:os。Popen现在已弃用。应该使用subprocess模块,所以这里有一个版本的@reannual的代码,它使用subprocess并直接回答了这个问题(通过直接将列宽度作为int值给出:
import subprocess
columns = int(subprocess.check_output(['stty', 'size']).split()[1])
在OS X 10.9上测试
import os
rows, columns = os.popen('stty size', 'r').read().split()
使用“stty size”命令,根据python邮件列表中的线程,该命令在linux上相当通用。它打开“stty size”命令作为文件,从中“读取”,并使用一个简单的字符串分割来分隔坐标。
不像操作系统。environ["COLUMNS"]值(尽管使用bash作为我的标准shell,但我不能访问),数据也将是最新的,而我相信os。environ["COLUMNS"]值只在python解释器启动时有效(假设用户自那时起调整了窗口的大小)。
(参见@GringoSuave关于如何在python 3.3+上做到这一点的回答)