如何在控制台中删除输入问题? [复制]

Posted

技术标签:

【中文标题】如何在控制台中删除输入问题? [复制]【英文标题】:How can i delete input question in console? [duplicate] 【发布时间】:2020-11-30 20:02:34 【问题描述】:

我想用新的输出覆盖输入。我想做同样的事情 (https://***.com/a/8436827/14079038) 但我需要覆盖输入。

我的代码返回:

while not addIp.__eq__(''):
    ignoredIp.append(addIp)
    print(addIp)
    addIp = input('Would you like to add ip ? (None = no): ')
Would you like to add ip ? (None = no): 1.1.1.1
1.1.1.1
Would you like to add ip ? (None = no): 1.1.1.2
1.1.1.2
Would you like to add ip ? (None = no):

但我想要这样的东西:

10.11.100.66
10.11.100.67
10.11.100.68
10.11.100.69
10.11.100.70
Would you like to add ip ? (None = no):

【问题讨论】:

为什么是while not addIp.__eq__(''):?为什么不正常while not addIp == '':或更短while not addIp: 我不明白你想做什么。 如果你写在同一行,那么在print中使用end='\r'。但它不适用于input(),它将\n 发送到控制台/终端,您无法停止它。也许如果你会使用像curses`这样的模块,它可以在一些控制台/终端中使用特殊代码将光标移动到任何地方,那么你可以回到上一行。 您希望屏幕上的输出仅显示 IP 地址,而不显示问题。那是你要的吗? @furas 给了你答案。 我要修改删除输入到控制台的写入 【参考方案1】:

如果你写在同一行,那么在print()中使用end='\r',它不会移到下一行。

但它不适用于将\n 发送到控制台/终端的input(),您无法阻止它。也许如果你会使用像 curses 这样的模块,它可以在某些控制台/终端中使用特殊代码将光标移动到任何地方,那么你可以回到上一行。


在 Linux 终端上,您可以使用代码 \033[nAn 向上移动。

这样您就可以使用\033[1A 移动到上一行并打印文本来代替问题。

最后还需要一些空格来从较长的问题中删除文本。

addIp = '?'
while addIp:
    addIp = input('Would you like to add ip ? (None = no): ')
    print('\033[1A' + addIp + ' '*40)

见other codes。 Linux 使用类似的代码为文本着色。


还有一些模块应该适用于 Windows、Linux,

curses npyscreen urwid

它们用于在文本模式下绘制小部件(TUI - 文本用户界面)


并非所有控制台/终端都能尊重这些代码 - 通常 IDE/编辑器中的控制台不尊重这些代码。

【讨论】:

优秀的简单解决方案。学到了一些新东西,谢谢! 我使用的是 Windows 系统,当我写 import curses 时,它让我出错:ModuleNotFoundError: No module named '_curses' @SimonBarras 我不使用 Windows 来测试它,但 curses 作为标准模块应该适用于所有系统。但我还发现了外部模块windows-curses,也许它对你有用。此链接还链接到 curses 页面上对 Windows 用户非常有用 - Unofficial Windows Binaries for Python Extension Packages

以上是关于如何在控制台中删除输入问题? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何按特定顺序从列表中删除字符串而不输入其值? [复制]

如何删除跨站点 div 中的 div? [复制]

如何从Opera中删除输入[type =“number”]中的箭头[复制]

如何把一个服务删除

程序在python中运行时如何防止用户输入控制台? [复制]

如何在 Python 中删除行尾? [复制]