Как я могу запретить Spyder вставлять новую строку после ввода данных пользователем?

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!

Редактировать:

Как отмечали другие в разделе комментариев, эта проблема невоспроизводима даже для меня, за исключением использования интерфейса IPython в среде IDE Spyder. Если кто-то использует IPython за пределами Spyder, запустите приведенный выше код и дайте мне знать, выдает ли он такой же результат. Я могу воспроизвести нежелательный вывод через интерфейс IPython Spyder, но не через сеанс терминала, поэтому это что-то специфичное для IPython или Spyder.


person paanvaannd    schedule 21.06.2017    source источник
comment
Вы запускаете свой код из оболочки Python?   -  person Christian Dean    schedule 21.06.2017
comment
@paanvaannd Ваша проблема невоспроизводима...   -  person cs95    schedule 21.06.2017
comment
@ChristianDean Я запускаю его из Spyder, Python IDE. В интерфейсе есть консоль IPython, и запуск оттуда кода приводит к описанному выше результату. Возможно, это просто проблема с тем, как IPython обрабатывает input()?   -  person paanvaannd    schedule 21.06.2017
comment
@Coldspeed Я только что набирал ответ Кристиану выше, но вам может быть интересно это увидеть, поскольку это может быть причиной того, что он не воспроизводится в вашей среде. Возможно, это IPython. Если это так, это не проблема, и я просто закрою вопрос. Спасибо за помощь, однако!   -  person paanvaannd    schedule 21.06.2017


Ответы (3)


(здесь разработчик Spyder) Это похоже на незначительную ошибку в нашей консоли IPython. Пожалуйста, сообщите об этом здесь:

https://github.com/jupyter/qtconsole

Примечание. Эта консоль не просто встраивает терминальный сеанс IPython в Spyder (поэтому сравнивать ее с ней вообще бессмысленно).

Вместо этого это повторная реализация большей части поведения терминала, но с использованием графического набора инструментов (называемого Qt) и архитектуры ядра/интерфейса Jupyter.

person Carlos Cordoba    schedule 23.06.2017
comment
Я понимаю; Спасибо за ответ! Я сообщу о проблеме по предложенной ссылке через несколько минут. - person paanvaannd; 23.06.2017

Возможно, это не совсем то, что вам нужно, но это должно решить вашу проблему.

Удалить предыдущую строку в консоли с помощью:

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) + "!")

См. последний удаленный STDOUT.

Если это не работает, попробуйте

print(CURSOR_UP_ONE + ERASE_LINE)

вместо

print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE)
person ChickenFeet    schedule 21.06.2017
comment
Обе предложенные итерации вызова функции (с последним CURSOR_UP_ONE и без него) фактически добавляют еще одну пустую строку между приглашениями ввода в IPython для меня. Запустив из терминала, я получаю строки ввода, которые сами удаляются, используя начальную предложенную итерацию функции (что аккуратно... Я мог бы использовать это в некоторых других программах для очистки вывода). Кажется, это способ, которым IPython обрабатывает input(), поэтому я оставлю это открытым еще немного, просто чтобы подтвердить. Но спасибо за дополнительную информацию! :+) - person paanvaannd; 21.06.2017

Никаких лишних пустых строк в консоли Windows Vista.

Дополнительные пустые строки вставляются в Spyder, когда выбрано «выполнить в текущей консоли».

Эти дополнительные строки НЕ вставляются, если программа выполняется в «выделенной консоли». (Питон 3.6, Спайдер 3.2.3, IPython 5.3.0)

Spyder -> Выполнить -> Конфигурация для каждого файла... -> Выполнить в специальной консоли

(16.10.2017, 32-разрядная версия Anaconda на 32-разрядной версии MS Windows Vista.)

person slawek    schedule 17.10.2017