【问题标题】:How can I prevent Spyder from inserting a new line after taking user input?如何防止 Spyder 在接受用户输入后插入新行?
【发布时间】:2017-11-23 20:01:06
【问题描述】:

Spyder 在每次调用 input() 函数之间在控制台输出中插入一个空行,但我不希望这样(即我希望 input() 提示在控制台中的连续行上,而不是由空行)。有没有办法做到这一点?我尝试使用 input("foo", end="") 认为它可能像 print() 函数一样工作,但事实并非如此......

代码:

fname = input("Please enter your first name: ")
lname = input("Please enter your last name: ")
print("Pleased to meet you, " + str(fname) + " " + str(lname) + "!")

输出:

Please enter your first name: Jane

Please enter your last name: Doe
Pleased to meet you, Jane Doe!

期望的输出:

Please enter your first name: Jane
Please enter your last name: Doe
Pleased to meet you, Jane Doe!

编辑:

正如其他人在 cmets 部分中指出的那样,这个问题是不可重现的,即使对我来说也是如此,除非通过在 Spyder IDE 中使用 IPython 接口。如果有人在 Spyder 之外运行 IPython,请运行上面的代码并让我知道这是否会产生相同的输出。我可以通过 Spyder 的 IPython 接口而不是通过终端会话重现不需要的输出,所以这是 IPython 或 Spyder 特有的。

【问题讨论】:

  • 您是从 Python shell 运行代码吗?
  • @paanvaannd 您的问题无法重现...
  • @ChristianDean 我在 Python IDE 的 Spyder 中运行它。界面中有一个 IPython 控制台,从那里运行代码会产生我描述的输出。也许这只是 IPython 如何处理 input() 的问题?
  • @Coldspeed 我只是在上面输入 Christian 的回复,但您可能也有兴趣看到它,因为这可能是它在您的环境中无法重现的原因。也许这是 IPython 的事情。如果是这样,这不是问题,我将结束这个问题。不过,感谢您的帮助!

标签: python input ipython newline spyder


【解决方案1】:

也许不完全是您所追求的,但它应该可以解决您的问题。

删除控制台中的上一行:

def delete_previous_line():
    CURSOR_UP_ONE = '\x1b[1A'
    ERASE_LINE = '\x1b[2K'
    print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE)


fname = input("Please enter your first name: ")
delete_previous_line()
lname = input("Please enter your last name: ")
print("Pleased to meet you, " + str(fname) + " " + str(lname) + "!")

remote last STDOUT

如果不行就试试

print(CURSOR_UP_ONE + ERASE_LINE)

而不是

print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE)

【讨论】:

  • 两个建议的函数调用迭代(有和没有最后一个 CURSOR_UP_ONE 的那些)实际上为我在 IPython 的输入提示之间添加了 another 空白行。从终端运行,我使用函数的初始建议迭代自己删除了输入提示行(这很整洁......我可能会在更多程序中使用它来清理输出)。这似乎是 IPython 处理input() 的一种方式,所以我会保持这个开放一段时间,以确认一下。不过,感谢您提供额外的信息! :+)
【解决方案2】:

这里是 Spyder 开发人员)这看起来像是我们的 IPython 控制台中的一个小错误。请在此处报告:

https://github.com/jupyter/qtconsole

注意:这个控制台不仅仅是在 Spyder 中嵌入一个终端 IPython 会话(这就是为什么与它进行比较毫无意义)。

相反,它是对大多数终端行为的重新实现,但使用了图形工具包(称为 Qt)和 Jupyter 内核/前端架构。

【讨论】:

  • 我明白了;感谢您的答复!我会在几分钟后通过建议的链接报告问题。
【解决方案3】:

Window Vista 控制台中没有多余的空行。

选择“在当前控制台执行”时,Spyder 中会插入额外的空行。

如果程序在“专用控制台”中执行,则不会插入这些额外的行。 (Python 3.6、Spyder 3.2.3、IPython 5.3.0)

Spyder -> 运行 -> 每个文件的配置... -> 在专用控制台中执行

(2017 年 10 月 16 日,MS Windows Vista 32 位上的 32 位 Anaconda。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多