如何确定UNIX Shell中的列数

时间:2019-11-30 23:03:31

标签: python shell terminal

我想确定sh / bash脚本的窗口中的列数。我现在正在使用tput cols,但是我发现在某些平台上(Synology)tput库不可用。

我知道这里有一个C库,但是二进制文件不是一个选择。

Python3是一个选项,但是我没有在帮助文件中找到任何东西...

tput cols的替代方案,如果可能的话...

1 个答案:

答案 0 :(得分:3)

正确的方法:Python标准库

Python 3支持shutil.get_terminal_size(),如果尚未从导出COLUMNSLINES的shell中调用Python,Python 3支持os.get_terminal_size()(就像bash一样,当并以互动模式运行并附加了TTY)。


缺少权利:从Python询问外壳程序

如果您想通过shell获取此信息,则 some shell(包括bash)将以交互方式公开它。以下(虽然缺乏适当的错误处理)对此进行了说明:

#!/usr/bin/env python3
import subprocess, sys
p = subprocess.Popen(['bash', '-i'],
                     stdin=subprocess.PIPE,
                     stdout=subprocess.PIPE,
                     stderr=sys.stderr)
out = p.communicate(b'''printf '%s\n' "$COLUMNS" "$LINES"''')[0]
cols, lines = out.split(b'\n')[:2]
print("Cols: {}; lines: {}".format(int(cols), int(lines)))