python - 如何确定 UNIX shell 中的列数
问题描述
我想为我的 sh/bash 脚本确定窗口中的列数。我现在正在使用tput cols
,但我发现在某些平台(Synology)上该tput
库不可用。
我知道有一个 C 库可以解决这个问题,但二进制文件不是一个选项。
Python3 是一个选项,但我在帮助文件中没有找到任何内容......
的替代方案tput cols
,如果可能的话...
解决方案
正确的方法:Python 标准库
Python 3 支持,如果没有从导出的 shell 调用 Python shutil.get_terminal_size()
,它本身会退回到和(就像 bash 一样,在连接了 TTY 的交互模式下运行时)。os.get_terminal_size()
COLUMNS
LINES
不太正确:从 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)))
推荐阅读
- shell - 不同位置的 Fedora 中特殊字符 (?) 的不同行为
- windows - Logback 翻转一次并停止翻转(windows with tomcat)
- python-requests - 使用带有嵌套 subdictionary.RobotFrameowork 的字典向服务端点发布请求
- python - 在 Python 状态事件中杀死一个线程
- vb.net - 将字符串从 vb.net 传递到 cmd
- c# - 如何在 PopBackStack() 函数上设置动画?
- sql - 组合数组大查询
- azure - Azure KeyVault 机密读取/Azure CLI 限制 (Ansible)
- node.js - 节点 PDFKit 管道到多个目标
- javascript - 如何解决谷歌语音 API“返回空白结果”问题?