输入调用后在同一行输出

时间:2017-04-07 22:13:32

标签: python

我想获取输入,然后在同一行上打印输出。这种尝试不起作用。

while True:
    op = input("Input: ")
    print("\tOutput: " + op)

输出如下:

Input: a
    Output:a
Input: cat
    Output cat
Input: 32
    Output: 32

我希望它看起来像这样:

Input: a     Output: a
Input cat    Output: cat
Input: 32    Output: 32

这在Python中可行吗?它需要覆盖一行输出,但我不知道它是否可能,或者如何做。

4 个答案:

答案 0 :(得分:1)

你不能轻易做到,特别是跨平台。那是因为当你按“输入”时(惊喜!)换行。

所以你要做的就是将光标向上移动一行。您可以使用linux上的控制代码执行此操作 - 我不确定如何在Windows上执行此操作,但它可能很尴尬。

如果您使用的是Mac / Linux,请尝试以下操作:

move_back = '\033[F'

choice = ''
while choice != 'q':
    choice = input('Input: ')
    print('{move_back}Input: {input_} Ouput: {output}'.format(
        move_back=move_back,
        input_=choice,
        output=choice.upper(),
    ))

您需要重新打印输入的原因是因为光标从上一行的开头开始。如果您只是打印Output:...,那么它将覆盖已存在的内容。 是用于移动光标的控制代码,但打印出已有的光盘也很容易。

答案 1 :(得分:1)

这取决于stdout和stdin的绑定(默认输出和输入通道)。问题的关键在于用户必须按“Enter”提交输入,并且通常绑定到CR / LF对。如果您的I / O设备已启用后退一行,则可以打印该字符,重新打印输入,然后打印输出。

在不知道设备或其特性的情况下,我无法提供实际代码。查看友好的邻居文档以获取相应的控制字符。

答案 2 :(得分:1)

如果您使用的是 Windows ,则可以使用Python的msvcrt模块:

In [4]: import msvcrt
   ...: import sys
   ...: while True:
   ...:     op = ""
   ...:     print('Input: ', end='')
   ...:     while True:
   ...:         c = msvcrt.getch().decode('utf-8')  # capture single character
   ...:         if c == '\r':                       # enter pressed
   ...:             break
   ...:         op += c
   ...:         print(c, end='')                    # print character to stdout
   ...:     print('\tOutput: ' + op)                # print whole output
   ...:
Input: a        Output: a
Input: cat      Output: cat
Input: 32       Output: 32

尝试这个(或任何其他建议)时要小心。如果您正在使用IDE,则这些命令可能无法在IDE的控制台中运行。尝试在标准Windows cmd.exe控制台中运行代码,你应该没问题。

答案 3 :(得分:-1)

import **sys**
sys.stdout.write() #use

你可以使用" +"要连接String因为write函数接受一个参数

使用此功能结束任何行,您将使用" \ n"