显示在Pythoninput上编辑的默认值是否可能?
是否有可能让Python接受像这样的input:
文件夹名称:下载
但是用户键入“下载”而不是用户已经在那里作为初始值。 如果用户想要将其编辑为“下载”,则只需添加一个“s”,然后按回车。
使用正常的input命令:
folder=input('Folder name: ')
我能得到的只是一个空白的提示:
文件夹名称:
有没有一个简单的方法来做到这一点,我失踪了?
标准库函数input()
和raw_input()
没有这个function。 如果您使用Linux,则可以使用readline
模块来定义使用预填充值和高级行编辑的input函数:
def rlinput(prompt, prefill=''): readline.set_startup_hook(lambda: readline.insert_text(prefill)) try: return raw_input(prompt) finally: readline.set_startup_hook()
我假设你的意思是从命令行。 我从来没有看到命令行提示的初始值,它们通常是这样的forms:
Folder [default] :
在代码中是简单的:
res = raw_input('Folder [default] : ') res = res or 'default'
或者,您可以尝试使用Python中的curses模块来执行某些操作。
这在Windows中工作。
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
我认为最好的(最简单和最便携的)解决scheme是@ rlotun和@Stephen的结合:
default = '/default/path/' dir = raw_input('Folder [%s]' % default) dir = dir or default
不是最好的方法,但为了共享…您可以使用Javascript来获取IPython Notebook中的所有input。
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)
在下一个单元格中,您可以使用新的variables:
print newvar
这不是一个很好的答案,但它是一个窗口的工作。 尽我所能努力,我无法使用Python版本3.5在Windows10电脑上运行Readline或pyReadline。 所以我写了这个。 不是世界上最好的代码,因为我只用了3个月的Python。 但它的作品。
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
记事本停止运行,直到它被closures,所以它下面的input()行是不需要的。 一旦记事本第一次被打开,并放置在我想要在屏幕上,它就像一个popup式input窗口。 我假设你可以使用任何文本编辑器,如Notepad ++或Scripe或Code Writer等
如果你这样做,用户将不得不删除现有的单词。 如果用户点击“返回”,如何提供默认值?
>>> default_folder = "My Documents" >>> try: folder = input("folder name [%s]:" %default_folder) ... except SyntaxError: folder = default_folder