问题描述
|
我正在使用一个交互式外壳,用户在其中输入一些文本,并以类似于对话的方式获取文本。在android和iphone上的最新SMS UI上,您可以看到您编写的文本的左侧对齐文本,以及您收到的文本的右侧对齐文本。
这是我想要实现的效果,但是在Linux shell中(没有精美的图形,只有输入和输出流)。
我很了解
format()
和rjust()
方法,但是它们需要知道您想要用其填充值的字符数,而且我也不知道当前shell的宽度。
我不受我可以安装或使用的库的限制,我主要针对Linux平台,以为跨平台的东西总是很好。
解决方法
使用诅咒。
使用
window.getmaxyx()
获取端子尺寸。
另一种选择:
import os
rows,cols = os.popen(\'stty size\',\'r\').read().split()
,如前所述,使用诅咒。对于简单的情况,如果您不想使用curses,则可以使用COLUMNS
环境变量(更多信息请参见此处)。
,如果需要正确调整多行输出,请结合以下各项:
获取窗口宽度:如何在Python中获取Linux控制台窗口宽度
textwrap.wrap
使用正义
就像是:
import textwrap
screen_width = <width of screen>
txt = <text to right justify>
# Right-justifies a single line
f = lambda x : x.rjust(screen_width)
# wrap returns a list of strings of max length \'screen_width\'
# \'map\' then applies \'f\' to each to right-justify them.
# \'\\n\'.join() then combines them into a single string with newlines.
print \'\\n\'.join(map(f,textwrap.wrap(txt,screen_width)))