Подтвердить что ты не робот

Показать значение по умолчанию для редактирования на входе Python возможно?

Возможно ли, чтобы python принимал ввод следующим образом:

Folder name: Download

Но вместо того, чтобы пользователь набрал "Загрузить", он уже существует как начальное значение. Если пользователь хочет отредактировать его как "Загрузки", все, что ему нужно сделать, это добавить 's' и нажать enter.

Использование обычной команды ввода:

folder=input('Folder name: ')

все, что я могу получить, это пустое приглашение:

Folder name:

Есть ли простой способ сделать это, что мне не хватает?

4b9b3361

Ответ 1

Стандартные функции библиотеки input() и raw_input() не имеют этой функции. Если вы используете Linux, вы можете использовать модуль readline для определения функции ввода, которая использует значение предварительной заливки и расширенное редактирование строк:

def rlinput(prompt, prefill=''):
   readline.set_startup_hook(lambda: readline.insert_text(prefill))
   try:
      return raw_input(prompt)
   finally:
      readline.set_startup_hook()

Ответ 2

Я предполагаю, что вы имеете в виду из командной строки. Я никогда не видел начальных значений для командной строки, они обычно имеют форму:

     Folder [default] : 

который в коде просто:

     res = raw_input('Folder [default] : ')
     res = res or 'default'

В качестве альтернативы вы можете попробовать что-то сделать, используя модуль curses в Python.

Ответ 3

Это работает в окнах.

import win32console

_stdin = win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)

def input_def(prompt, default=''):
    keys = []
    for c in unicode(default):
        evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
        evt.Char = c
        evt.RepeatCount = 1
        evt.KeyDown = True
        keys.append(evt)

    _stdin.WriteConsoleInput(keys)
    return raw_input(prompt)

if __name__ == '__main__':
    name = input_def('Folder name: ')
    print
    print name

Ответ 4

Я думаю, что лучшее (самое простое и самое портативное) решение - это комбинация ответов @rlotun и @Stephen:

default = '/default/path/'
dir = raw_input('Folder [%s]' % default)
dir = dir or default

Ответ 5

Не лучший аспект, но ради совместного использования... Вы можете использовать Javascript для получения всех видов входов в IPython Notebook.

from IPython.display import HTML
newvar = ""
htm = """
<input id="inptval" style="width:60%;" type="text" value="This is an editable default value.">
<button onclick="set_value()" style="width:20%;">OK</button>

<script type="text/Javascript">
    function set_value(){
        var input_value = document.getElementById('inptval').value;
        var command = "newvar = '" + input_value + "'";
        var kernel = IPython.notebook.kernel;
        kernel.execute(command);
    }
</script>
"""
HTML(htm)

В следующей ячейке вы можете использовать новую переменную:

print newvar

Ответ 6

Это не очень хороший ответ, но это работа для окон. Насколько я старался, я не мог заставить Readline или pyReadline работать на моем компьютере с Windows 10 с Python Ver 3.5. Поэтому я написал это вместо этого. Не лучший код в мире, так как я только использовал Python в течение 3 месяцев. Но он работает.

    import os

    def note_input(defaultvalue):
        #Create a textfile
        txtfile = open("txtfile.txt", "w")
        #
        # populate it with the default value
        txtfile.write(defaultvalue)
        txtfile.close()
        #
        # call Notepad
        os.system("notepad.exe txtfile.txt") 
        # input("Just holding until notepad is close : ") (did not need this line) 
        #
        # get the Value Entered/Changed in Notepad
        txtfile = open("txtfile.txt", "r")
        func_value = txtfile.read()
        txtfile.close()
        return func_value
    # END DEF

Блокнот остановил запуск программы до ее закрытия, поэтому строка ввода() под ней не нужна. Как только блокнот был открыт в первый раз и помещен туда, где я хотел его на экране, это было похоже на всплывающее окно ввода. Я предполагаю, что вы можете использовать любой текстовый редактор, например Notepad ++ или Scripe или Code Writer, и т.д.

Ответ 7

Если вы это сделаете, пользователь должен будет удалить существующее слово. Как насчет предоставления значения по умолчанию, если пользователь нажимает "return"?

>>> default_folder = "My Documents"
>>> try: folder = input("folder name [%s]:" %default_folder)
... except SyntaxError: folder = default_folder