首页 > 解决方案 > 如何确定 UNIX shell 中的列数

问题描述

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

我知道有一个 C 库可以解决这个问题,但二进制文件不是一个选项。

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

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

标签: pythonshellterminal

解决方案


正确的方法:Python 标准库

Python 3 支持,如果没有从导出的 shell 调用 Python shutil.get_terminal_size(),它本身会退回到和(就像 bash 一样,在连接了 TTY 的交互模式下运行时)。os.get_terminal_size()COLUMNSLINES


不太正确:从 Python 中询问 Shell

如果您想通过 shell 获取这些信息,一些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)))

推荐阅读