python 格式采用织物彩色字符串的实际长度
python format take the real length for fabric colored strings
我使用 python fabric 为终端输出着色,并使用字符串格式来对齐文本。
颜色向字符串添加不可见代码,如何不破坏格式化输出?
>>> from fabric.colors import red
>>> print '{:->27}'.format('line one')
-------------------line one
>>> print '{:->27}'.format('longer line two')
------------longer line two
>>> print '{:->27}'.format(red('line three'))
--------line three
>>>
正如汉斯所说,我们只需要加上+9
>>>
>>> print '{:->27}'.format('line one')
-------------------line one
>>> print '{:->27}'.format('longer line two')
------------longer line two
>>> print '{:->36}'.format(red('line three'))
-----------------line three
>>> print '{:->36}'.format(red('and more words'))
-------------and more words
>>> print '{:->36}'.format(red('and more words plus one'))
----and more words plus one
>>>
由于 source code 的面料颜色包含此内容:
def _wrap_with(code):
def inner(text, bold=False):
c = code
if bold:
c = "1;%s" % c
return "3[%sm%s3[0m" % (c, text)
return inner
red = _wrap_with('31')
而你的 'line three' 输出一行比其他行短 9 个字符,
我猜 red(String) 的输出总是包含 9 个不可见字符,由字符串 "\033[%sm%s3[0m".
存储
所以要修正格式,当使用红色(String)时,您应该输入
print '{:->(27+9)}'.format(red('line three'))
而不是
print '{:->27}'.format(red('line three'))
我使用 python fabric 为终端输出着色,并使用字符串格式来对齐文本。
颜色向字符串添加不可见代码,如何不破坏格式化输出?
>>> from fabric.colors import red
>>> print '{:->27}'.format('line one')
-------------------line one
>>> print '{:->27}'.format('longer line two')
------------longer line two
>>> print '{:->27}'.format(red('line three'))
--------line three
>>>
正如汉斯所说,我们只需要加上+9
>>>
>>> print '{:->27}'.format('line one')
-------------------line one
>>> print '{:->27}'.format('longer line two')
------------longer line two
>>> print '{:->36}'.format(red('line three'))
-----------------line three
>>> print '{:->36}'.format(red('and more words'))
-------------and more words
>>> print '{:->36}'.format(red('and more words plus one'))
----and more words plus one
>>>
由于 source code 的面料颜色包含此内容:
def _wrap_with(code):
def inner(text, bold=False):
c = code
if bold:
c = "1;%s" % c
return "3[%sm%s3[0m" % (c, text)
return inner
red = _wrap_with('31')
而你的 'line three' 输出一行比其他行短 9 个字符, 我猜 red(String) 的输出总是包含 9 个不可见字符,由字符串 "\033[%sm%s3[0m".
存储所以要修正格式,当使用红色(String)时,您应该输入
print '{:->(27+9)}'.format(red('line three'))
而不是
print '{:->27}'.format(red('line three'))