如何防止 Spyder 在接受用户输入后插入新行?

How can I prevent Spyder from inserting a new line after taking user input?

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!

编辑:

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

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

删除控制台中的上一行:

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)

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

https://github.com/jupyter/qtconsole

注意:这个控制台并不是简单地在 Spyder 中嵌入一个终端 IPython 会话(这就是为什么与它进行比较根本没有意义)。

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

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

选择"execute in current console"时,将额外的空线插入间谍。

如果程序在 "dedicated console" 中执行,则不会插入这些额外的行。 (Python 3.6,Spyder 3.2.3,IPython 5.3.0)

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

(2017/10/16,MS 上的 32 位 Anaconda Windows Vista 32 位。)