如何使用 Python 在 shell 中右对齐段落?

发布于 2024-11-02 05:27:01 字数 320 浏览 1 评论 0原文

我正在开发一个交互式 shell,用户可以在其中输入一些文本,并以看起来像对话的方式返回文本。在 Android 和 iPhone 上最新的 SMS UI 上,您可以看到您编写的文本左对齐,您收到的文本右对齐。

这是我想要实现的效果,但是在 Linux shell 中(没有花哨的图形,只有输入和输出的流程)。

我很了解 format()rjust() 方法,但它们需要知道您想要填充值的字符数,而我不知道不知道当前外壳的宽度。

我可以安装或使用的库不受限制,我主要针对 Linux 平台,认为拥有跨平台的东西总是好的。

I'm working on an interactive shell where the user is entering some text, and get text back in a way that looks like a conversation. On recent SMS UIs on androids and iphones, you can see text aligned to the left for the text you wrote, and text aligned to the right for the text you received.

This is the effect I want to achieve, but in a Linux shell (without fancy graphics, just the flow of inputs and outputs).

I'm well aware of the format() and rjust() methods but they require to know the number of characters your want to pad the value with, and I don't know the width of the current shell.

I'm not limited in the lib I can install or use and I'm mainly aiming the Linux platform, thought having something cross platform is always nice.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我三岁 2024-11-09 05:27:01

使用curses

使用 window.getmaxyx() 获取终端大小。

另一种选择:

import os
rows, cols = os.popen('stty size', 'r').read().split()

Use curses.

Use window.getmaxyx() to get the terminal size.

Another alternative:

import os
rows, cols = os.popen('stty size', 'r').read().split()
请恋爱 2024-11-09 05:27:01

正如已经指出的,使用诅咒。对于简单的情况,如果您不想使用诅咒,可以使用 COLUMNS 环境变量 (更多信息)。

As already noted, use curses. For simple cases, if you don't want to use curses, you may use COLUMNS environment variable (more here).

病女 2024-11-09 05:27:01

如果多行输出需要右对齐,则组合使用:

  1. 获取窗口宽度: 如何在 Python 中获取 Linux 控制台窗口宽度
  2. textwrap.wrap
  3. 使用 rjust

类似:

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)))

If multiple lines of output need to be right justified, then a combination of:

  1. Getting the window width: How to get Linux console window width in Python
  2. textwrap.wrap
  3. Using rjust

Something like:

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)))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文