阻止Python显示输入的输入

时间:2014-06-06 17:12:25

标签: python input

在Python中,当我通过终端中的raw_input更改变量的值时,它会写一个新行来说明它的新值。我想知道是否有办法避免这种情况,因为在用户输入后直接有一个打印功能,它使用之前收到的值。最后,用户将获得两个值:原始值和修改值,而为了我的程序,他只需要查看修改后的值。

我使用IDLE编写脚本,然后在终端中执行它们。

更新

一个简单的例子如下。输入为字符串“Hello”,输出应为“Me:Hello”。在最终结果之前不应该有“你好”。

a = raw_input()
print ("Me: " + a)

输出应该只是

Me: Hello

而不是

Hello
Me: Hello

3 个答案:

答案 0 :(得分:0)

如果您希望用户看到输入,只需将sys.stdout静音(它有点破解):

>>> from StringIO import StringIO
>>> import sys
>>> orig_out = sys.stdout
>>> print 'give me input: ',
give me input: 
>>> sys.stdout = StringIO()
>>> a = raw_input('')
string I type
>>> sys.stdout = orig_out
>>> a
>>> 'string I type'

...如果你把它放到一个函数中那么它就是你想要的!

a.py

....

def foo():
    orig_out = sys.stdout
    print 'give me input: ',
    sys.stdout = StringIO()
    a = raw_input()
    sys.stdout = orig_out

if __name__ == '__main__':
    foo()

运行:

yed@rublan $ ~ python a.py

give me input: something I type!!!!!

yed@rublan $ ~

答案 1 :(得分:0)

您不必做类似困难的事情,答案很简单:

chat_respond="you say: "+input("Write here to respond: ")
#i will suppose that you want to write hello
#That will display:
Write here to respond: hello

因为将自动打印输入,它将显示变量的字符串,但是您在输入之前添加了一些内容,因此它将打印出带有输入的内容

you say: hello

您无需使用困难的库或修改模块,只需在存储输入之前将其添加到变量中,即可:

chat_respond="you say: "
chat_respond+=input("Write here to respond: ")

它会做同样的事情 再见!

答案 2 :(得分:0)

我知道这是一个较晚的答案,但这是Python 2 + 3解决方案(略有改进):

prompt_demo.py中:

# coding: utf-8
from __future__ import absolute_import
from __future__ import print_function

import io
import sys

import six.moves


def prompt(msg):
    print(msg, end=u'')
    orig_out = sys.stdout
    try:
        sys.stdout = io.StringIO()
        return six.moves.input(msg)
    finally:
        sys.stdout = orig_out


if __name__ == '__main__':
    text = prompt(u"Give me input: ")
    print(u"Do you mean '{0}'?".format(text))
  • 此解决方案使用io.StringIO,它与Python 2 + 3兼容。
  • 它还使用six库向后移植raw_input函数(在Python 3中已重命名为input)。
  • 在输入过程中出现异常的情况下,try ... finally解决方案更好:它恢复了sys.stdout的原始值。

我还想指出Click库中提供的不错的解决方案。这是一个演示:

import click

if __name__ == '__main__':
    text = click.prompt(u"Give me input: ", prompt_suffix='')
    click.echo(u"Do you mean '{0}'?".format(text))

请参阅有关click.prompt的文档。