2012-03-09 90 views
4

我已经看到了一个关于证明“打印”权限的问题,但是我可以在同一行上左右文本,对于--help?它会看起来像这样的终端:在python中左右对齐吗?

|              | 
|Left           Right| 
|              | 
+0

您是否将ArgParse用于命令行解析器? – 2012-03-09 19:58:08

+0

对于正确的理由,您首先需要知道您的总输出空间有多宽。你做? – delnan 2012-03-09 19:58:36

回答

4

我认为你可以使用sys.stdout此:

import sys 

def stdout(message): 
    sys.stdout.write(message) 
    sys.stdout.write('\b' * len(message)) # \b: non-deleting backspace 

def demo(): 
    stdout('Right'.rjust(50)) 
    stdout('Left') 
    sys.stdout.flush() 
    print() 

demo() 

您可以用精确的控制台宽度,你可以从https://stackoverflow.com/a/943921/711085

得到更换 50
+0

难道你不能使用'print message,'(注意尾随逗号)吗? – 2012-03-09 20:06:15

+0

漂亮。我评论过它,并对它进行了编辑,使其可以在交互式Python提示符以及python2和python3中运行。确切准确地将'50'替换为您从http://stackoverflow.com/a/943921/711085获得的值。 – ninjagecko 2012-03-09 20:06:20

+0

@andrewcooke:'\ b'“后退:光标移动到行的开头,所以实际上我在打印出'Left'时覆盖了行,可以使用'print',不过@FJ。 – Blender 2012-03-09 20:21:45

3

这是一个非常简单的方法:

>>> left, right = 'Left', 'Right' 
>>> print '|{}{}{}|'.format(left, ' '*(50-len(left+right)), right) 
|Left           Right| 

作为功能:

def lr_justify(left, right, width): 
    return '{}{}{}'.format(left, ' '*(width-len(left+right)), right) 

>>> lr_justify('Left', '', 50) 
'Left            ' 
>>> lr_justify('', 'Right', 50) 
'            Right' 
>>> lr_justify('Left', 'Right', 50) 
'Left           Right' 
>>> lr_justify('', '', 50) 
'             '