在python中是否有一种方法以编程方式确定控制台的宽度?我指的是一行中不换行的字符数,而不是窗口的像素宽度。
Edit
寻找在Linux上工作的解决方案
在python中是否有一种方法以编程方式确定控制台的宽度?我指的是一行中不换行的字符数,而不是窗口的像素宽度。
Edit
寻找在Linux上工作的解决方案
当前回答
如果在调用此脚本时没有控制终端,那么这里的许多Python 2实现都将失败。您可以检查sys.stdout.isatty()来确定这是否实际上是一个终端,但这将排除一些情况,因此我认为最python化的方法来计算终端大小是使用内置的curses包。
import curses
w = curses.initscr()
height, width = w.getmaxyx()
其他回答
它是:
import os
columns, rows = os.get_terminal_size(0)
# or
import shutil
columns, rows = shutil.get_terminal_size()
shutil函数只是一个os的包装器,它可以捕捉一些错误并设置一个回退,但是它有一个巨大的警告-当管道爆裂!这是一个相当大的交易。 使用os.get_terminal_size(0)来代替管道时获取终端大小。
第一个参数0是一个参数,指示应该使用stdin文件描述符而不是默认的stdout。我们希望使用stdin,因为stdout在被管道传输时会分离自身,在这种情况下会引发错误。
我试图弄清楚什么时候使用stdout而不是stdin参数是有意义的,不知道为什么它是这里的默认值。
不确定为什么它在模块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类。还有一个后端口,虽然已经无关紧要了。
如果您使用的是Python 3.3或更高版本,我建议使用内置的get_terminal_size()。但是,如果您使用的是旧版本,想要一种简单的、跨平台的方式,那么可以使用asciimatics。这个包支持2.7以下的Python版本,并使用与上面建议的选项类似的选项来获取当前终端/控制台大小。
简单地构造Screen类并使用dimensions属性获取高度和宽度。这已经在Linux、OSX和Windows上被证明是有效的。
哦,在这里完全披露:我是作者,所以如果你在这方面有任何问题,请随时打开一个新的问题。
从Python 3.3开始,它是直接的: https://docs.python.org/3/library/os.html#querying-the-size-of-a-terminal
>>> import os
>>> ts = os.get_terminal_size()
>>> ts.lines
24
>>> ts.columns
80
如果在调用此脚本时没有控制终端,那么这里的许多Python 2实现都将失败。您可以检查sys.stdout.isatty()来确定这是否实际上是一个终端,但这将排除一些情况,因此我认为最python化的方法来计算终端大小是使用内置的curses包。
import curses
w = curses.initscr()
height, width = w.getmaxyx()