如何防止 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 位。)
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 位。)